diff options
author | rescobar | 2010-08-23 19:57:24 +0000 |
---|---|---|
committer | rescobar | 2010-08-23 19:57:24 +0000 |
commit | 1378e118ea5006b764c9ea902773456c817e9a50 (patch) | |
tree | 00ca2e881f4a72e4e21e37b489017f211a563cfc | |
parent | f5b90f0676d83705154ef331f32e1a0d5b56d17c (diff) | |
download | org.eclipse.osee-1378e118ea5006b764c9ea902773456c817e9a50.tar.gz org.eclipse.osee-1378e118ea5006b764c9ea902773456c817e9a50.tar.xz org.eclipse.osee-1378e118ea5006b764c9ea902773456c817e9a50.zip |
Event System registration cleanup
54 files changed, 3152 insertions, 2677 deletions
diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.framework.messaging.event.res/META-INF/MANIFEST.MF index afa1e4499f9..3d7c51f356c 100644 --- a/plugins/org.eclipse.osee.framework.messaging.event.res/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.framework.messaging.event.res/META-INF/MANIFEST.MF @@ -4,16 +4,19 @@ Bundle-Name: Framework Event Service (Incubation) Bundle-SymbolicName: org.eclipse.osee.framework.messaging.event.res;singleton:=true Bundle-Version: 0.9.5.qualifier Eclipse-ExtensibleAPI: true -Bundle-Activator: org.eclipse.osee.framework.messaging.event.res.Activator -Require-Bundle: org.eclipse.osee.framework.jdk.core, - org.eclipse.osee.framework.plugin.core, - org.eclipse.osee.framework.core, - org.eclipse.core.runtime, - org.eclipse.osee.framework.messaging +Bundle-Activator: org.eclipse.osee.framework.messaging.event.res.internal.Activator Bundle-ActivationPolicy: lazy Bundle-Description: Skynet Event Service - Skynet Cache Network Manager Bundle-Vendor: Eclipse Open System Engineering Environment Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Import-Package: org.eclipse.osee.framework.core.enums +Import-Package: org.eclipse.core.runtime, + org.eclipse.osee.framework.core.enums, + org.eclipse.osee.framework.core.exception, + org.eclipse.osee.framework.core.util, + org.eclipse.osee.framework.jdk.core.type, + org.eclipse.osee.framework.jdk.core.util, + org.eclipse.osee.framework.logging, + org.eclipse.osee.framework.messaging, + org.osgi.framework Export-Package: org.eclipse.osee.framework.messaging.event.res, org.eclipse.osee.framework.messaging.event.res.msgs diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/Activator.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/Activator.java deleted file mode 100644 index ecf0694211b..00000000000 --- a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/Activator.java +++ /dev/null @@ -1,34 +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.messaging.event.res; - -import org.eclipse.osee.framework.plugin.core.OseeActivator; - -/** - * @author Donald G. Dunne - */ -public class Activator extends OseeActivator { - - private static Activator pluginInstance; - public static final String PLUGIN_ID = "org.eclipse.osee.framework.messaging.event.res"; - - public Activator() { - super(); - pluginInstance = this; - } - - /** - * Returns the shared instance. - */ - public static Activator getInstance() { - return pluginInstance; - } -}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/IOseeCoreModelEventService.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/IOseeCoreModelEventService.java new file mode 100644 index 00000000000..7b9f383bfab --- /dev/null +++ b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/IOseeCoreModelEventService.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * 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.messaging.event.res; + +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.messaging.ConnectionListener; + +/** + * @author Roberto E. Escobar + */ +public interface IOseeCoreModelEventService { + + void addFrameworkListener(IFrameworkEventListener frameworkEventListener); + + void removeFrameworkListener(IFrameworkEventListener frameworkEventListener); + + void addConnectionListener(ConnectionListener connectionListener); + + void removeConnectionListener(ConnectionListener connectionListener); + + void sendRemoteEvent(RemoteEvent remoteEvent) throws OseeCoreException; + +} diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/RemoteEventUtil.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/RemoteEventUtil.java index 83a7051142c..b7a14a53e48 100644 --- a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/RemoteEventUtil.java +++ b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/RemoteEventUtil.java @@ -15,7 +15,11 @@ import org.eclipse.osee.framework.messaging.event.res.msgs.RemoteNetworkSender1; /** * @author Donald G. Dunne */ -public class RemoteEventUtil { +public final class RemoteEventUtil { + + private RemoteEventUtil() { + // Utility class + } public static RemoteNetworkSender1 getNetworkSender(String sourceObject, String sessionId, String machineName, String userId, String machineIp, int port, String clientVersion) { RemoteNetworkSender1 networkSender = new RemoteNetworkSender1(); diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/ResEventManager.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/ResEventManager.java deleted file mode 100644 index 9f1a9e134ca..00000000000 --- a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/ResEventManager.java +++ /dev/null @@ -1,233 +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.messaging.event.res; - -import java.rmi.RemoteException; -import java.util.Map; -import org.eclipse.osee.framework.messaging.ConnectionListener; -import org.eclipse.osee.framework.messaging.ConnectionNode; -import org.eclipse.osee.framework.messaging.OseeMessagingListener; -import org.eclipse.osee.framework.messaging.OseeMessagingStatusCallback; -import org.eclipse.osee.framework.messaging.ReplyConnection; -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; - -/** - * @author Donald G. Dunne - */ -public class ResEventManager implements OseeMessagingStatusCallback { - - private static ResEventManager instance; - private ConnectionNode connectionNode; - private ResMessagingTracker resMessagingTracker; - private IFrameworkEventListener frameworkEventListener; - private ConnectionListener connectionListener; - - private ResEventManager() { - // private - } - - public static ResEventManager getInstance() { - if (instance == null) { - instance = new ResEventManager(); - } - return instance; - } - - public static void dispose() { - if (instance != null) { - instance.stopListeningForRemoteCoverageEvents(); - instance.resMessagingTracker.close(); - instance = null; - } - } - - private void startListeningForRemoteCoverageEvents() { - if (resMessagingTracker == null) { - System.out.println("Registering Client for Remote Events\n"); - resMessagingTracker = new ResMessagingTracker(); - resMessagingTracker.open(true); - addingRemoteEventService(resMessagingTracker.getConnectionNode()); - } - } - - private void stopListeningForRemoteCoverageEvents() { - System.out.println("De-Registering Client for Remote Events\n"); - resMessagingTracker.close(); - resMessagingTracker = null; - } - - public void addingRemoteEventService(ConnectionNode connectionNode) { - this.connectionNode = connectionNode; - connectionNode.addConnectionListener(connectionListener); - - connectionNode.subscribe(ResMessages.RemoteTransactionEvent1, new RemoteTransactionEvent1Listener(), instance); - connectionNode.subscribe(ResMessages.RemotePersistEvent1, new RemotePersistEvent1Listener(), instance); - connectionNode.subscribe(ResMessages.RemoteBranchEvent1, new RemoteBranchEvent1Listener(), instance); - connectionNode.subscribe(ResMessages.RemoteBroadcastEvent1, new RemoteBroadcastEvent1Listener(), instance); - connectionNode.subscribe(ResMessages.RemoteAccessControlEvent1, new RemoteAccessControlEvent1Listener(), instance); - } - - public void kick(RemoteEvent remoteEvent) throws Exception { - if (remoteEvent instanceof RemotePersistEvent1) { - sendRemoteEvent(ResMessages.RemotePersistEvent1, remoteEvent); - } else if (remoteEvent instanceof RemoteTransactionEvent1) { - sendRemoteEvent(ResMessages.RemoteTransactionEvent1, remoteEvent); - } else if (remoteEvent instanceof RemoteBranchEvent1) { - sendRemoteEvent(ResMessages.RemoteBranchEvent1, remoteEvent); - } else if (remoteEvent instanceof RemoteBroadcastEvent1) { - sendRemoteEvent(ResMessages.RemoteBroadcastEvent1, remoteEvent); - } else if (remoteEvent instanceof RemoteAccessControlEvent1) { - sendRemoteEvent(ResMessages.RemoteAccessControlEvent1, remoteEvent); - } else { - System.out.println("ResEventManager: Unhandled remote event " + remoteEvent); - } - } - - public void sendRemoteEvent(ResMessages resMessage, RemoteEvent remoteEvent) throws Exception { - // System.out.println(String.format(getClass().getSimpleName() + " - sending [%s]", - // remoteEvent.getClass().getSimpleName())); - if (connectionNode != null) { - connectionNode.send(resMessage, remoteEvent, instance); - } - } - - public void start(IFrameworkEventListener frameworkEventListener) { - this.frameworkEventListener = frameworkEventListener; - startListeningForRemoteCoverageEvents(); - } - - public void stop() { - this.frameworkEventListener = null; - stopListeningForRemoteCoverageEvents(); - } - - @Override - public void fail(Throwable th) { - System.err.println(getClass().getSimpleName() + " - fail: " + th.getLocalizedMessage()); - th.printStackTrace(); - } - - @Override - public void success() { - // do nothing - } - - public class RemoteAccessControlEvent1Listener extends OseeMessagingListener { - - public RemoteAccessControlEvent1Listener() { - super(RemoteAccessControlEvent1.class); - } - - @Override - public void process(final Object message, Map<String, Object> headers, ReplyConnection replyConnection) { - RemoteAccessControlEvent1 remoteTransactionEvent1 = (RemoteAccessControlEvent1) message; - System.err.println(String.format(getClass().getSimpleName() + " - received [%s]", - message.getClass().getSimpleName())); - try { - frameworkEventListener.onEvent(remoteTransactionEvent1); - } catch (RemoteException ex) { - System.err.println(getClass().getSimpleName() + " - process: " + ex.getLocalizedMessage()); - } - } - } - - public class RemoteTransactionEvent1Listener extends OseeMessagingListener { - - public RemoteTransactionEvent1Listener() { - super(RemoteTransactionEvent1.class); - } - - @Override - public void process(final Object message, Map<String, Object> headers, ReplyConnection replyConnection) { - RemoteTransactionEvent1 remoteTransactionEvent1 = (RemoteTransactionEvent1) message; - System.err.println(String.format(getClass().getSimpleName() + " - received [%s]", - message.getClass().getSimpleName())); - try { - frameworkEventListener.onEvent(remoteTransactionEvent1); - } catch (RemoteException ex) { - System.err.println(getClass().getSimpleName() + " - process: " + ex.getLocalizedMessage()); - } - } - } - - public class RemotePersistEvent1Listener extends OseeMessagingListener { - - public RemotePersistEvent1Listener() { - super(RemotePersistEvent1.class); - } - - @Override - public void process(final Object message, Map<String, Object> headers, ReplyConnection replyConnection) { - RemotePersistEvent1 remotePersistEvent1 = (RemotePersistEvent1) message; - // System.err.println(String.format(getClass().getSimpleName() + " - received [%s]", - // message.getClass().getSimpleName())); - try { - frameworkEventListener.onEvent(remotePersistEvent1); - } catch (RemoteException ex) { - System.err.println(getClass().getSimpleName() + " - process: " + ex.getLocalizedMessage()); - } - } - } - - public class RemoteBranchEvent1Listener extends OseeMessagingListener { - - public RemoteBranchEvent1Listener() { - super(RemoteBranchEvent1.class); - } - - @Override - public void process(final Object message, Map<String, Object> headers, ReplyConnection replyConnection) { - RemoteBranchEvent1 remoteBranchEvent1 = (RemoteBranchEvent1) message; - System.err.println(String.format(getClass().getSimpleName() + " - received [%s]", - message.getClass().getSimpleName())); - try { - frameworkEventListener.onEvent(remoteBranchEvent1); - } catch (RemoteException ex) { - System.err.println(getClass().getSimpleName() + " - process: " + ex.getLocalizedMessage()); - } - } - } - - public class RemoteBroadcastEvent1Listener extends OseeMessagingListener { - - public RemoteBroadcastEvent1Listener() { - super(RemoteBroadcastEvent1.class); - } - - @Override - public void process(final Object message, Map<String, Object> headers, ReplyConnection replyConnection) { - RemoteBroadcastEvent1 remoteBroadcastEvent1 = (RemoteBroadcastEvent1) message; - System.err.println(String.format(getClass().getSimpleName() + " - received [%s]", - message.getClass().getSimpleName())); - try { - frameworkEventListener.onEvent(remoteBroadcastEvent1); - } catch (RemoteException ex) { - System.err.println(getClass().getSimpleName() + " - process: " + ex.getLocalizedMessage()); - } - } - } - - public ConnectionListener getConnectionListener() { - return connectionListener; - } - - public void setConnectionListener(ConnectionListener connectionListener) { - this.connectionListener = connectionListener; - if (connectionNode != null) { - connectionNode.addConnectionListener(connectionListener); - } - } - -} diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/ResMessagingTracker.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/ResMessagingTracker.java deleted file mode 100644 index c75b3115e3b..00000000000 --- a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/ResMessagingTracker.java +++ /dev/null @@ -1,60 +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.messaging.event.res; - -import org.eclipse.osee.framework.core.exception.OseeCoreException; -import org.eclipse.osee.framework.messaging.ConnectionNode; -import org.eclipse.osee.framework.messaging.MessageService; -import org.osgi.framework.ServiceReference; -import org.osgi.util.tracker.ServiceTracker; - -/** - * @author Donald G. Dunne - */ -public class ResMessagingTracker extends ServiceTracker { - - private ConnectionNode connectionNode; - - public ResMessagingTracker() { - super(Activator.getInstance().getBundle().getBundleContext(), MessageService.class.getName(), null); - } - - @Override - public Object addingService(ServiceReference reference) { - MessageService service = (MessageService) super.addingService(reference); - try { - connectionNode = service.getDefault(); - } catch (OseeCoreException ex) { - System.err.println("Can't add RES messaging service " + ex.getLocalizedMessage()); - ex.printStackTrace(); - } - return service; - } - - @Override - public void removedService(ServiceReference reference, Object service) { - super.removedService(reference, service); - } - - @Override - public MessageService getService() { - return (MessageService) super.getService(); - } - - public ConnectionNode getConnectionNode() { - return connectionNode; - } - - public void setConnectionNode(ConnectionNode connectionNode) { - this.connectionNode = connectionNode; - } - -} diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/Activator.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/Activator.java new file mode 100644 index 00000000000..664ff1b2fde --- /dev/null +++ b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/Activator.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * 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.messaging.event.res.internal; + +import org.eclipse.osee.framework.core.util.ServiceDependencyTracker; +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +/** + * @author Donald G. Dunne + */ +public class Activator implements BundleActivator { + + private ServiceDependencyTracker tracker; + + @Override + public void start(BundleContext context) throws Exception { + tracker = new ServiceDependencyTracker(context, new OseeCoreModelEventServiceRegHandler()); + tracker.open(); + } + + @Override + public void stop(BundleContext context) throws Exception { + Lib.close(tracker); + } +}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/FrameworkRelayMessagingListener.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/FrameworkRelayMessagingListener.java new file mode 100644 index 00000000000..6e91bfaa922 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/FrameworkRelayMessagingListener.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * 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.messaging.event.res.internal; + +import java.rmi.RemoteException; +import java.util.Map; +import org.eclipse.osee.framework.messaging.OseeMessagingListener; +import org.eclipse.osee.framework.messaging.ReplyConnection; +import org.eclipse.osee.framework.messaging.event.res.IFrameworkEventListener; +import org.eclipse.osee.framework.messaging.event.res.RemoteEvent; + +/** + * @author Roberto E. Escobar + */ +public class FrameworkRelayMessagingListener<T extends RemoteEvent> extends OseeMessagingListener { + + private final IFrameworkEventListener frameworkEventListener; + private final boolean isVerbose; + + protected FrameworkRelayMessagingListener(Class<?> clazz, IFrameworkEventListener frameworkEventListener, boolean isVerbose) { + super(clazz); + this.frameworkEventListener = frameworkEventListener; + this.isVerbose = isVerbose; + } + + @Override + public void process(Object message, Map<String, Object> headers, ReplyConnection replyConnection) { + if (isVerbose) { + System.err.println(String.format(getClass().getSimpleName() + " - received [%s]", + message.getClass().getSimpleName())); + } + try { + T remoteEvent = asCastedMessage(message); + frameworkEventListener.onEvent(remoteEvent); + } catch (RemoteException ex) { + System.err.println(getClass().getSimpleName() + " - process: " + ex.getLocalizedMessage()); + } + } + + @SuppressWarnings("unchecked") + private T asCastedMessage(Object message) { + return (T) message; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((frameworkEventListener == null) ? 0 : frameworkEventListener.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + FrameworkRelayMessagingListener<?> other = (FrameworkRelayMessagingListener<?>) obj; + if (frameworkEventListener == null) { + if (other.frameworkEventListener != null) { + return false; + } + } else if (!frameworkEventListener.equals(other.frameworkEventListener)) { + return false; + } + return true; + } +} diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/OseeCoreModelEventServiceImpl.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/OseeCoreModelEventServiceImpl.java new file mode 100644 index 00000000000..96dd50a7785 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/OseeCoreModelEventServiceImpl.java @@ -0,0 +1,130 @@ +/******************************************************************************* + * 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.messaging.event.res.internal; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.type.HashCollection; +import org.eclipse.osee.framework.messaging.ConnectionListener; +import org.eclipse.osee.framework.messaging.ConnectionNode; +import org.eclipse.osee.framework.messaging.OseeMessagingListener; +import org.eclipse.osee.framework.messaging.OseeMessagingStatusCallback; +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; + +/** + * @author Donald G. Dunne + */ +public class OseeCoreModelEventServiceImpl implements OseeMessagingStatusCallback, IOseeCoreModelEventService { + + private final Map<IFrameworkEventListener, HashCollection<ResMessages, OseeMessagingListener>> subscriptions = + new HashMap<IFrameworkEventListener, HashCollection<ResMessages, OseeMessagingListener>>(); + private final Map<ResMessages, Boolean> messages; + private final ConnectionNode connectionNode; + + public OseeCoreModelEventServiceImpl(ConnectionNode connectionNode, Map<ResMessages, Boolean> messages) { + this.connectionNode = connectionNode; + this.messages = messages; + } + + @Override + public void success() { + // do nothing + } + + @Override + public void fail(Throwable th) { + System.err.println(getClass().getSimpleName() + " - fail: " + th.getLocalizedMessage()); + th.printStackTrace(); + } + + @Override + public void sendRemoteEvent(RemoteEvent remoteEvent) throws OseeCoreException { + ResMessages resMessage = getResMessageType(remoteEvent); + if (resMessage != null) { + System.out.println(String.format("ResEventManager: Unhandled remote event ", remoteEvent)); + } else if (connectionNode != null) { + System.out.println(String.format( + "ResEventManager: Connection node was null - unable to send remote event [%s] ", resMessage)); + } else { + connectionNode.send(resMessage, remoteEvent, this); + } + } + + private ResMessages getResMessageType(RemoteEvent remoteEvent) { + ResMessages resMessage = null; + if (remoteEvent != null) { + for (ResMessages allowedMessage : messages.keySet()) { + Class<?> messageClass = allowedMessage.getSerializationClass(); + if (messageClass.isAssignableFrom(remoteEvent.getClass())) { + resMessage = allowedMessage; + break; + } + } + } + return resMessage; + } + + @Override + public void addConnectionListener(ConnectionListener connectionListener) { + connectionNode.addConnectionListener(connectionListener); + } + + @Override + public void removeConnectionListener(ConnectionListener connectionListener) { + connectionNode.removeConnectionListener(connectionListener); + } + + @Override + public void addFrameworkListener(IFrameworkEventListener frameworkEventListener) { + System.out.println("Registering Client for Remote Events\n"); + + for (Entry<ResMessages, Boolean> messageEntries : messages.entrySet()) { + ResMessages resMessageID = messageEntries.getKey(); + boolean isVerbose = messageEntries.getValue(); + subscribe(resMessageID, resMessageID.getSerializationClass(), isVerbose, frameworkEventListener); + } + } + + @Override + public void removeFrameworkListener(IFrameworkEventListener frameworkEventListener) { + System.out.println("De-Registering Client for Remote Events\n"); + + HashCollection<ResMessages, OseeMessagingListener> listeners = subscriptions.get(frameworkEventListener); + if (listeners != null) { + for (ResMessages messageID : listeners.keySet()) { + Collection<OseeMessagingListener> listernerList = listeners.getValues(messageID); + if (listernerList != null) { + for (OseeMessagingListener listener : listernerList) { + connectionNode.unsubscribe(messageID, listener, this); + } + } + } + subscriptions.remove(frameworkEventListener); + } + } + + private <T extends RemoteEvent> void subscribe(ResMessages messageId, Class<T> clazz, boolean isVerbose, IFrameworkEventListener frameworkEventListener) { + OseeMessagingListener listener = new FrameworkRelayMessagingListener<T>(clazz, frameworkEventListener, isVerbose); + connectionNode.subscribe(messageId, listener, this); + HashCollection<ResMessages, OseeMessagingListener> listeners = subscriptions.get(frameworkEventListener); + if (listeners == null) { + listeners = new HashCollection<ResMessages, OseeMessagingListener>(true, HashSet.class); + subscriptions.put(frameworkEventListener, listeners); + } + listeners.put(messageId, listener); + } +} diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/OseeCoreModelEventServiceRegHandler.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/OseeCoreModelEventServiceRegHandler.java new file mode 100644 index 00000000000..dafdab435ca --- /dev/null +++ b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/OseeCoreModelEventServiceRegHandler.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * 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.messaging.event.res.internal; + +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.util.AbstractTrackingHandler; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.messaging.ConnectionNode; +import org.eclipse.osee.framework.messaging.MessageService; +import org.eclipse.osee.framework.messaging.event.res.IOseeCoreModelEventService; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +/** + * @author Roberto E. Escobar + */ +public class OseeCoreModelEventServiceRegHandler extends AbstractTrackingHandler { + + private static final Class<?>[] DEPENDENCIES = new Class<?>[] {MessageService.class}; + + private final Map<ResMessages, Boolean> eventMessageConfig = new HashMap<ResMessages, Boolean>(); + private ServiceRegistration registration; + + public OseeCoreModelEventServiceRegHandler() { + eventMessageConfig.put(ResMessages.RemoteAccessControlEvent1, Boolean.TRUE); + eventMessageConfig.put(ResMessages.RemoteBranchEvent1, Boolean.TRUE); + eventMessageConfig.put(ResMessages.RemoteBroadcastEvent1, Boolean.TRUE); + eventMessageConfig.put(ResMessages.RemotePersistEvent1, Boolean.FALSE); + eventMessageConfig.put(ResMessages.RemoteTransactionEvent1, Boolean.TRUE); + } + + @Override + public Class<?>[] getDependencies() { + return DEPENDENCIES; + } + + @Override + public void onActivate(BundleContext context, Map<Class<?>, Object> services) { + MessageService messageService = getService(MessageService.class, services); + try { + ConnectionNode connectionNode = messageService.getDefault(); + IOseeCoreModelEventService service = new OseeCoreModelEventServiceImpl(connectionNode, eventMessageConfig); + registration = context.registerService(IOseeCoreModelEventService.class.getName(), service, null); + } catch (OseeCoreException ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } + + @Override + public void onDeActivate() { + if (registration != null) { + registration.unregister(); + } + } + +} diff --git a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/ResMessages.java b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/ResMessages.java index b04aec89f79..9200dc090b9 100644 --- a/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/ResMessages.java +++ b/plugins/org.eclipse.osee.framework.messaging.event.res/src/org/eclipse/osee/framework/messaging/event/res/internal/ResMessages.java @@ -8,9 +8,10 @@ * Contributors: * Boeing - initial API and implementation *******************************************************************************/ -package org.eclipse.osee.framework.messaging.event.res; +package org.eclipse.osee.framework.messaging.event.res.internal; import org.eclipse.osee.framework.messaging.MessageID; +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; @@ -25,12 +26,12 @@ public enum ResMessages implements MessageID { RemoteAccessControlEvent1(true, "AFRkIhdPkwExx96ioXgA", "topic:org.eclipse.osee.coverage.msgs.RemoteAccessControlEvent1", RemoteAccessControlEvent1.class, false); private String name; - private Class<?> clazz; + private Class<? extends RemoteEvent> clazz; boolean isReplyRequired; private String guid; private boolean isTopic; - ResMessages(boolean isTopic, String guid, String name, Class<?> clazz, boolean isReplyRequired) { + ResMessages(boolean isTopic, String guid, String name, Class<? extends RemoteEvent> clazz, boolean isReplyRequired) { this.guid = guid; this.name = name; this.clazz = clazz; @@ -44,7 +45,7 @@ public enum ResMessages implements MessageID { } @Override - public Class<?> getSerializationClass() { + public Class<? extends RemoteEvent> getSerializationClass() { return clazz; } diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventFiltersTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventFiltersTest.java index b1de302027e..cdb53aa1520 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventFiltersTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventFiltersTest.java @@ -21,7 +21,6 @@ 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; import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; -import org.eclipse.osee.framework.skynet.core.event.InternalEventManager2; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; @@ -39,7 +38,8 @@ import org.junit.Before; * @author Donald G. Dunne */ public class ArtifactEventFiltersTest { - + // artifact listener create for use by all tests to just capture result eventArtifacts for query + private final ArtifactEventListener artifactEventListener = new ArtifactEventListener(); private ArtifactEvent resultArtifactEvent = null; private Sender resultSender = null; public static List<String> ignoreLogging = Arrays.asList(""); @@ -47,19 +47,20 @@ public class ArtifactEventFiltersTest { @Before public void setup() { - InternalEventManager2.internalSetPendRunning(true); + OseeEventManager.getPreferences().setNewEvents(true); + OseeEventManager.getPreferences().setPendRunning(true); } @After public void cleanup() { - InternalEventManager2.internalSetPendRunning(false); + OseeEventManager.getPreferences().setPendRunning(false); } @org.junit.Test public void testArtifactEventFilters() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - InternalEventManager2.addListener(artifactEventListener); + OseeEventManager.removeAllListeners(); + OseeEventManager.addListener(artifactEventListener); testArtifactEventFilters__artifactTypeInheritance(); testArtifactEventFilters__branchFilter(); @@ -103,7 +104,7 @@ public class ArtifactEventFiltersTest { // Send dummy event Sender sender = new Sender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); - InternalEventManager2.processEventArtifactsAndRelations(sender, testArtifactEvent); + processEventArtifactsAndRelations(sender, testArtifactEvent); // Test that event DID come through Assert.assertNotNull(resultArtifactEvent); @@ -116,7 +117,7 @@ public class ArtifactEventFiltersTest { resultSender = null; // Re-send dummy event - InternalEventManager2.processEventArtifactsAndRelations(sender, testArtifactEvent); + processEventArtifactsAndRelations(sender, testArtifactEvent); // Test that event DID come through Assert.assertNotNull(resultArtifactEvent); @@ -129,7 +130,7 @@ public class ArtifactEventFiltersTest { resultSender = null; // Re-send dummy event - InternalEventManager2.processEventArtifactsAndRelations(sender, testArtifactEvent); + processEventArtifactsAndRelations(sender, testArtifactEvent); // Test that event did NOT come through Assert.assertNull(resultArtifactEvent); @@ -154,7 +155,7 @@ public class ArtifactEventFiltersTest { // Send dummy event Sender sender = new Sender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); - InternalEventManager2.processEventArtifactsAndRelations(sender, testArtifactEvent); + processEventArtifactsAndRelations(sender, testArtifactEvent); // Test that event DID come through Assert.assertNotNull(resultArtifactEvent); @@ -168,7 +169,7 @@ public class ArtifactEventFiltersTest { resultSender = null; // Re-send dummy event - InternalEventManager2.processEventArtifactsAndRelations(sender, testArtifactEvent); + processEventArtifactsAndRelations(sender, testArtifactEvent); // Test that event did NOT come through Assert.assertNull(resultArtifactEvent); @@ -181,17 +182,27 @@ public class ArtifactEventFiltersTest { resultSender = null; // Re-send dummy event - InternalEventManager2.processEventArtifactsAndRelations(sender, testArtifactEvent); + processEventArtifactsAndRelations(sender, testArtifactEvent); // Test that event did NOT come through Assert.assertNull(resultArtifactEvent); } - private NetworkSender getDummyRemoteNetworkSender() { - return new NetworkSender(this.getClass(), GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0"); + private static void processEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) { + OseeEventManager.internalTestProcessEventArtifactsAndRelations(sender, artifactEvent); + } + + private static NetworkSender getDummyRemoteNetworkSender() { + return new NetworkSender(ArtifactEventFiltersTest.class, GUID.create(), "PC", "12345", "123.234.345.456", 34, + "1.0.0"); } - private class ArtifactEventListener implements IArtifactEventListener { + + public void clearEventCollections() { + resultArtifactEvent = null; + } + + private final class ArtifactEventListener implements IArtifactEventListener { @Override public List<? extends IEventFilter> getEventFilters() { @@ -206,16 +217,4 @@ public class ArtifactEventFiltersTest { } - @org.junit.Before - public void setUpTest() { - OseeEventManager.setNewEvents(true); - } - - // artifact listener create for use by all tests to just capture result eventArtifacts for query - private final ArtifactEventListener artifactEventListener = new ArtifactEventListener(); - - public void clearEventCollections() { - resultArtifactEvent = null; - } - }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventLoopbackTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventLoopbackTest.java index f63b299b769..93aab09f888 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventLoopbackTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventLoopbackTest.java @@ -10,7 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.framework.skynet.core.test.event; -import org.eclipse.osee.framework.skynet.core.event.InternalEventManager2; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -24,12 +24,12 @@ public class ArtifactEventLoopbackTest extends ArtifactEventTest { @BeforeClass public static void setUp() { - InternalEventManager2.setEnableRemoteEventLoopback(true); + OseeEventManager.getPreferences().setEnableRemoteEventLoopback(true); } @AfterClass public static void tearDown() { - InternalEventManager2.setEnableRemoteEventLoopback(false); + OseeEventManager.getPreferences().setEnableRemoteEventLoopback(false); } @Override diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventTest.java index 7454804c7f7..0ad002207fe 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/ArtifactEventTest.java @@ -39,9 +39,7 @@ 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.artifact.StaticIdManager; import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; -import org.eclipse.osee.framework.skynet.core.event.InternalEventManager2; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; -import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager2; import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event2.FrameworkEventUtil; @@ -92,17 +90,13 @@ public class ArtifactEventTest { @Before public void setup() { - InternalEventManager2.internalSetPendRunning(true); + OseeEventManager.getPreferences().setNewEvents(true); + OseeEventManager.getPreferences().setPendRunning(true); } @After public void cleanup() { - InternalEventManager2.internalSetPendRunning(false); - } - - @org.junit.Before - public void setUpTest() { - OseeEventManager.setNewEvents(true); + OseeEventManager.getPreferences().setPendRunning(false); } // artifact listener create for use by all tests to just capture result eventArtifacts for query @@ -117,14 +111,14 @@ public class ArtifactEventTest { public void testRegistration() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); OseeEventManager.addListener(artifactEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); OseeEventManager.removeListener(artifactEventListener); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); TestUtil.severeLoggingEnd(monitorLog); } @@ -142,11 +136,11 @@ public class ArtifactEventTest { } SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); OseeEventManager.addListener(artifactEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); // Test attribute injection Artifact injectArt = remoteInjection_attributes_modifyName(); @@ -170,11 +164,11 @@ public class ArtifactEventTest { public void testArtifactRelationEvents() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); OseeEventManager.addListener(artifactEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); Artifact newArt = testArtifactRelationEvents__addArtifact(); testArtifactRelationEvents__addRelation(newArt); @@ -334,7 +328,7 @@ public class ArtifactEventTest { RelationEventType.Added, CoreRelationTypes.Default_Hierarchical__Child, rootArt, injectArt); // Send - RemoteEventManager2.getInstance().onEvent(remoteEvent); + OseeEventManager.internalTestSendRemoteEvent(remoteEvent); // Wait for event to propagate @@ -368,7 +362,7 @@ public class ArtifactEventTest { CoreRelationTypes.Default_Hierarchical__Child, rootArt, injectArt); // Send - RemoteEventManager2.getInstance().onEvent(remoteEvent); + OseeEventManager.internalTestSendRemoteEvent(remoteEvent); // Wait for event to propagate @@ -415,7 +409,7 @@ public class ArtifactEventTest { remoteEvent.getRelationReorders().add(remoteReorder); // Send - RemoteEventManager2.getInstance().onEvent(remoteEvent); + OseeEventManager.internalTestSendRemoteEvent(remoteEvent); // Wait for event to propagate @@ -447,7 +441,7 @@ public class ArtifactEventTest { relation.setRationale(RATIONALE_STR); // Send - RemoteEventManager2.getInstance().onEvent(remoteEvent); + OseeEventManager.internalTestSendRemoteEvent(remoteEvent); // Wait for event to propagate @@ -484,7 +478,7 @@ public class ArtifactEventTest { relation.setRationale(NEW_RATIONALE_STR); // Send - RemoteEventManager2.getInstance().onEvent(remoteEvent); + OseeEventManager.internalTestSendRemoteEvent(remoteEvent); // Wait for event to propagate @@ -537,7 +531,7 @@ public class ArtifactEventTest { remGuidArt.getAttributes().add(remAttrChg); // Send - RemoteEventManager2.getInstance().onEvent(remoteEvent); + OseeEventManager.internalTestSendRemoteEvent(remoteEvent); // Wait for event to propagate @@ -587,7 +581,7 @@ public class ArtifactEventTest { remGuidArt.getAttributes().add(remAttrChg); // Send - RemoteEventManager2.getInstance().onEvent(remoteEvent); + OseeEventManager.internalTestSendRemoteEvent(remoteEvent); // Wait for event to propagate @@ -636,7 +630,7 @@ public class ArtifactEventTest { remGuidArt.getAttributes().add(remAttrChg); // Send - RemoteEventManager2.getInstance().onEvent(remoteEvent); + OseeEventManager.internalTestSendRemoteEvent(remoteEvent); // Wait for event to propagate @@ -668,8 +662,8 @@ public class ArtifactEventTest { public void testArtifactRelationReorderEvents() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); // Setup artifact and children to reorder SkynetTransaction transaction = @@ -688,7 +682,7 @@ public class ArtifactEventTest { transaction.execute(); OseeEventManager.addListener(artifactEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); List<Artifact> orderedChildren = newArt.getChildren(); Assert.assertEquals(5, orderedChildren.size()); @@ -779,16 +773,16 @@ public class ArtifactEventTest { public void testPurgeArtifactEvents() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); // Add new Artifact Test Artifact newArt = ArtifactTypeManager.addArtifact(CoreArtifactTypes.GeneralData, BranchManager.getCommonBranch()); newArt.setName(getClass().getSimpleName() + " - testPurgeArtifactEvents"); newArt.persist(); - InternalEventManager2.addListener(artifactEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.addListener(artifactEventListener); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); // Purge Artifact newArt.purgeFromBranch(); @@ -815,8 +809,8 @@ public class ArtifactEventTest { @org.junit.Test public void testReloadArtifactEvents() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); // Add new Artifact Test Artifact newArt = ArtifactTypeManager.addArtifact(CoreArtifactTypes.GeneralData, BranchManager.getCommonBranch()); @@ -824,7 +818,7 @@ public class ArtifactEventTest { newArt.persist(); OseeEventManager.addListener(artifactEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); // reload Artifact StaticIdManager.setSingletonAttributeValue(newArt, "this"); @@ -851,8 +845,8 @@ public class ArtifactEventTest { public void testChangeTypeArtifactEvents() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); // Add new Artifact for Test Artifact newArt = ArtifactTypeManager.addArtifact(CoreArtifactTypes.GeneralData, BranchManager.getCommonBranch()); @@ -860,7 +854,7 @@ public class ArtifactEventTest { newArt.persist(); OseeEventManager.addListener(artifactEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); // reload Artifact Assert.assertTrue(newArt.isOfType(CoreArtifactTypes.GeneralData)); diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventFiltersTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventFiltersTest.java index 271c190b391..8712cd63d78 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventFiltersTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventFiltersTest.java @@ -18,7 +18,6 @@ import org.eclipse.osee.framework.logging.SevereLoggingMonitor; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkSender; import org.eclipse.osee.framework.skynet.core.event.BranchEventType; import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener; -import org.eclipse.osee.framework.skynet.core.event.InternalEventManager2; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.BranchEvent; @@ -39,20 +38,21 @@ public class BranchEventFiltersTest { @Before public void setup() { - InternalEventManager2.internalSetPendRunning(true); + OseeEventManager.getPreferences().setNewEvents(true); + OseeEventManager.getPreferences().setPendRunning(true); } @After public void cleanup() { - InternalEventManager2.internalSetPendRunning(false); + OseeEventManager.getPreferences().setPendRunning(false); } @org.junit.Test public void testBranchEventFilters() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - InternalEventManager2.addListener(branchEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + OseeEventManager.addListener(branchEventListener); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); // Create dummy branch event String branchGuid = GUID.create(); @@ -65,7 +65,7 @@ public class BranchEventFiltersTest { // Send dummy event Sender sender = new Sender(new NetworkSender(this, GUID.create(), "PC", "12345", "123.234.345.456", 34, "1.0.0")); - InternalEventManager2.processBranchEvent(sender, testBranchEvent); + processBranchEvent(sender, testBranchEvent); // Test that event did come through Assert.assertNotNull(resultBranchEvent); @@ -79,7 +79,7 @@ public class BranchEventFiltersTest { resultSender = null; // Re-send dummy event - InternalEventManager2.processBranchEvent(sender, testBranchEvent); + processBranchEvent(sender, testBranchEvent); // Test that event did come through Assert.assertNotNull(resultBranchEvent); @@ -94,7 +94,7 @@ public class BranchEventFiltersTest { resultSender = null; // Re-send dummy event - InternalEventManager2.processBranchEvent(sender, testBranchEvent); + processBranchEvent(sender, testBranchEvent); // Test that event did NOT come through Assert.assertNull(resultBranchEvent); @@ -102,6 +102,10 @@ public class BranchEventFiltersTest { TestUtil.severeLoggingEnd(monitorLog); } + private static void processBranchEvent(Sender sender, BranchEvent branchEvent) { + OseeEventManager.internalTestProcessBranchEvent(sender, branchEvent); + } + private class BranchEventListener implements IBranchEventListener { @Override @@ -121,11 +125,6 @@ public class BranchEventFiltersTest { } } - @org.junit.Before - public void setUpTest() { - OseeEventManager.setNewEvents(true); - } - // artifact listener create for use by all tests to just capture result eventArtifacts for query private final BranchEventListener branchEventListener = new BranchEventListener(); diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventLoopbackTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventLoopbackTest.java index 1763d5e6506..35d65700676 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventLoopbackTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventLoopbackTest.java @@ -10,7 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.framework.skynet.core.test.event; -import org.eclipse.osee.framework.skynet.core.event.InternalEventManager2; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -24,12 +24,12 @@ public class BranchEventLoopbackTest extends BranchEventTest { @BeforeClass public static void setUp2() { - InternalEventManager2.setEnableRemoteEventLoopback(true); + OseeEventManager.getPreferences().setEnableRemoteEventLoopback(true); } @AfterClass public static void tearDown2() { - InternalEventManager2.setEnableRemoteEventLoopback(false); + OseeEventManager.getPreferences().setEnableRemoteEventLoopback(false); } @Override diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventTest.java index 0d7594cad08..810011a9a4a 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/BranchEventTest.java @@ -34,7 +34,6 @@ import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; import org.eclipse.osee.framework.skynet.core.conflict.ConflictManagerExternal; import org.eclipse.osee.framework.skynet.core.event.BranchEventType; import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener; -import org.eclipse.osee.framework.skynet.core.event.InternalEventManager2; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.BranchEvent; @@ -56,14 +55,14 @@ public class BranchEventTest { public void testRegistration() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); - InternalEventManager2.addListener(branchEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.addListener(branchEventListener); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); - InternalEventManager2.removeListener(branchEventListener); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeListener(branchEventListener); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); TestUtil.severeLoggingEnd(monitorLog); } @@ -71,12 +70,12 @@ public class BranchEventTest { @org.junit.Test public void testEvents() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - InternalEventManager2.addListener(branchEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + OseeEventManager.addListener(branchEventListener); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); try { - InternalEventManager2.internalSetPendRunning(true); + OseeEventManager.getPreferences().setPendRunning(true); Branch topLevel = testEvents__topLevelAdded(); Branch workingBranch = testEvents__workingAdded(topLevel); @@ -90,7 +89,7 @@ public class BranchEventTest { TestUtil.severeLoggingEnd(monitorLog, (isRemoteTest() ? ignoreLogging : new ArrayList<String>())); } finally { - InternalEventManager2.internalSetPendRunning(false); + OseeEventManager.getPreferences().setPendRunning(false); } } @@ -346,7 +345,7 @@ public class BranchEventTest { @org.junit.Before public void setUpTest() { - OseeEventManager.setNewEvents(true); + OseeEventManager.getPreferences().setNewEvents(true); } @org.junit.BeforeClass diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/TransactionEventLoopbackTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/TransactionEventLoopbackTest.java index 3bccb3941b9..008ad2737b3 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/TransactionEventLoopbackTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/TransactionEventLoopbackTest.java @@ -10,7 +10,7 @@ *******************************************************************************/ package org.eclipse.osee.framework.skynet.core.test.event; -import org.eclipse.osee.framework.skynet.core.event.InternalEventManager2; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -24,12 +24,12 @@ public class TransactionEventLoopbackTest extends TransactionEventTest { @BeforeClass public static void setUp() { - InternalEventManager2.setEnableRemoteEventLoopback(true); + OseeEventManager.getPreferences().setEnableRemoteEventLoopback(true); } @AfterClass public static void tearDown() { - InternalEventManager2.setEnableRemoteEventLoopback(false); + OseeEventManager.getPreferences().setEnableRemoteEventLoopback(false); } @Override diff --git a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/TransactionEventTest.java b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/TransactionEventTest.java index 57c04cf2ef8..aad4f6b8936 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/TransactionEventTest.java +++ b/plugins/org.eclipse.osee.framework.skynet.core.test/src/org/eclipse/osee/framework/skynet/core/test/event/TransactionEventTest.java @@ -12,7 +12,6 @@ package org.eclipse.osee.framework.skynet.core.test.event; import java.util.ArrayList; import java.util.Arrays; -import java.util.List; import junit.framework.Assert; import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; @@ -23,7 +22,6 @@ import org.eclipse.osee.framework.skynet.core.artifact.Artifact; 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.PurgeTransactionOperation; -import org.eclipse.osee.framework.skynet.core.event.InternalEventManager2; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.ITransactionEventListener; @@ -43,30 +41,30 @@ public class TransactionEventTest { private TransactionEvent resultTransEvent = null; private Sender resultSender = null; - public static List<String> ignoreLogging = Arrays.asList(""); @Before public void setup() { - InternalEventManager2.internalSetPendRunning(true); + OseeEventManager.getPreferences().setNewEvents(true); + OseeEventManager.getPreferences().setPendRunning(true); } @After public void cleanup() { - InternalEventManager2.internalSetPendRunning(false); + OseeEventManager.getPreferences().setPendRunning(false); } @org.junit.Test public void testRegistration() throws Exception { SevereLoggingMonitor monitorLog = TestUtil.severeLoggingStart(); - InternalEventManager2.internalRemoveAllListeners(); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + OseeEventManager.removeAllListeners(); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); OseeEventManager.addListener(transEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); OseeEventManager.removeListener(transEventListener); - Assert.assertEquals(0, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(0, OseeEventManager.getNumberOfListeners()); TestUtil.severeLoggingEnd(monitorLog); } @@ -96,9 +94,9 @@ public class TransactionEventTest { } // Add listener for delete transaction event - InternalEventManager2.internalRemoveAllListeners(); + OseeEventManager.removeAllListeners(); OseeEventManager.addListener(transEventListener); - Assert.assertEquals(1, InternalEventManager2.getNumberOfListeners()); + Assert.assertEquals(1, OseeEventManager.getNumberOfListeners()); // Delete it IOperation operation = new PurgeTransactionOperation(Activator.getInstance(), false, transIdToDelete); @@ -122,7 +120,7 @@ public class TransactionEventTest { Assert.assertEquals(newArt.getGuid(), guidArt.getGuid()); Assert.assertEquals(CoreArtifactTypes.GeneralData.getGuid(), guidArt.getArtTypeGuid()); - TestUtil.severeLoggingEnd(monitorLog, (isRemoteTest() ? ignoreLogging : new ArrayList<String>())); + TestUtil.severeLoggingEnd(monitorLog, (isRemoteTest() ? Arrays.asList("") : new ArrayList<String>())); } protected boolean isRemoteTest() { @@ -138,11 +136,6 @@ public class TransactionEventTest { } } - @org.junit.Before - public void setUpTest() { - OseeEventManager.setNewEvents(true); - } - // artifact listener create for use by all tests to just capture result eventArtifacts for query private final TransactionEventListener transEventListener = new TransactionEventListener(); diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/ArtifactTransactionData.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/ArtifactTransactionData.java index 2ac976b31e9..8e0799ea835 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/ArtifactTransactionData.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/ArtifactTransactionData.java @@ -14,8 +14,8 @@ import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.core.model.TransactionRecord; import org.eclipse.osee.framework.database.core.ConnectionHandler; import org.eclipse.osee.framework.database.core.OseeSql; -import org.eclipse.osee.framework.skynet.core.event.ArtifactModifiedEvent; import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event.systems.ArtifactModifiedEvent; import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact; import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType; diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/HttpAttributeTagger.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/HttpAttributeTaggingListener.java index 3da93ce84c0..7db30655c5d 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/HttpAttributeTagger.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/attribute/HttpAttributeTaggingListener.java @@ -29,7 +29,6 @@ import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.core.util.HttpProcessor; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.messaging.event.skynet.event.SkynetAttributeChange; -import org.eclipse.osee.framework.skynet.core.event.ArtifactModifiedEvent; import org.eclipse.osee.framework.skynet.core.event.ArtifactTransactionModifiedEvent; import org.eclipse.osee.framework.skynet.core.event.BranchEventType; import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData; @@ -38,8 +37,8 @@ import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListene import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener; import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener; import org.eclipse.osee.framework.skynet.core.event.ITransactionsDeletedEventListener; -import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event.systems.ArtifactModifiedEvent; import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event2.BranchEvent; import org.eclipse.osee.framework.skynet.core.event2.ITransactionEventListener; @@ -55,27 +54,125 @@ import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts; * * @author Roberto E. Escobar */ -public class HttpAttributeTagger { - private static final HttpAttributeTagger instance = new HttpAttributeTagger(); +public class HttpAttributeTaggingListener implements IArtifactEventListener, IFrameworkTransactionEventListener, IBranchEventListener, IArtifactsPurgedEventListener, IArtifactsChangeTypeEventListener, ITransactionEventListener, ITransactionsDeletedEventListener { private static final String XML_START = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><AttributeTag>"; private static final String XML_FINISH = "</AttributeTag>"; private static final String PREFIX = "<entry gammaId=\""; private static final String POSTFIX = "\"/>\n"; private final ExecutorService executor; - private final EventRelay eventRelay; - private HttpAttributeTagger() { + public HttpAttributeTaggingListener() { this.executor = Executors.newSingleThreadExecutor(); - this.eventRelay = new EventRelay(); - OseeEventManager.addListener(eventRelay); } - public static HttpAttributeTagger getInstance() { - return instance; + @Override + public void handleBranchEventREM1(Sender sender, BranchEventType branchModType, int branchId) { + // do nothing } - public void deregisterFromEventManager() { - OseeEventManager.removeListener(eventRelay); + @Override + public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) { + // if (sender.isRemote()) { + // return; + // } + // try { + // loadedArtifacts. + // //TODO: implements + // // Map<String, String> parameters = new HashMap<String, String>(); + // // parameters.put("sessionId", ClientSessionManager.getSessionId()); + // // parameters.put("queryId", Integer.toString(transactionJoinId)); + // // String url = + // // HttpUrlBuilder.getInstance().getOsgiServletServiceUrl(OseeServerContext.SEARCH_TAGGING_CONTEXT, + // // parameters); + // // String response = HttpProcessor.delete(new URL(url)); + // + // } catch (Exception ex) { + // OseeLog.log(Activator.class, Level.WARNING, "Error Deleting Tags during purge.", ex); + // } + } + + @Override + public void handleArtifactsChangeTypeEvent(Sender sender, int toArtifactTypeId, LoadedArtifacts loadedArtifacts) { + // Need to fix tags based on this event + } + + @Override + public void handleTransactionsDeletedEvent(Sender sender, int[] transactionIds) { + // Need to fix tags based on this event + } + + @Override + public void handleTransactionEvent(Sender sender, TransactionEvent transEvent) { + // Need to fix tags based on this event + } + + @Override + public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData txData) throws OseeCoreException { + if (sender.isRemote()) { + return; + } + TagService taggingInfo = new TagService(); + for (ArtifactTransactionModifiedEvent event : txData.getXModifiedEvents()) { + if (event instanceof ArtifactModifiedEvent) { + for (SkynetAttributeChange change : ((ArtifactModifiedEvent) event).getAttributeChanges()) { + if (AttributeTypeManager.getType(change.getTypeId()).isTaggable()) { + taggingInfo.add(change.getGammaId()); + } + } + } + } + if (taggingInfo.size() > 0) { + Future<?> future = executor.submit(taggingInfo); + if (DbUtil.isDbInit()) { + try { + future.get(); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, "Error while waiting for tagger to complete.", ex); + } + } + } + } + + @Override + public List<? extends IEventFilter> getEventFilters() { + return null; + } + + @Override + public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { + try { + if (sender.isRemote()) { + return; + } + TagService taggingInfo = new TagService(); + for (ArtifactTransactionModifiedEvent event : artifactEvent.getSkynetTransactionDetails()) { + if (event instanceof ArtifactModifiedEvent) { + for (SkynetAttributeChange change : ((ArtifactModifiedEvent) event).getAttributeChanges()) { + if (AttributeTypeManager.getType(change.getTypeId()).isTaggable()) { + taggingInfo.add(change.getGammaId()); + } + } + } + } + if (taggingInfo.size() > 0) { + Future<?> future = executor.submit(taggingInfo); + if (DbUtil.isDbInit()) { + try { + future.get(); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, "Error while waiting for tagger to complete.", ex); + } + } + } + } catch (OseeCoreException ex1) { + OseeLog.log(Activator.class, Level.SEVERE, ex1); + return; + } + } + + @Override + public void handleBranchEvent(Sender sender, BranchEvent branchEvent) { + // Need to fix tags based on this event } private final static class TagService implements Runnable { @@ -137,122 +234,4 @@ public class HttpAttributeTagger { } } } - - /** - * <REM2> - * - * @author Donald G. Dunne - */ - private final class EventRelay implements IArtifactEventListener, IFrameworkTransactionEventListener, IBranchEventListener, IArtifactsPurgedEventListener, IArtifactsChangeTypeEventListener, ITransactionEventListener, ITransactionsDeletedEventListener { - @Override - public void handleBranchEventREM1(Sender sender, BranchEventType branchModType, int branchId) { - // do nothing - } - - @Override - public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) { - // if (sender.isRemote()) { - // return; - // } - // try { - // loadedArtifacts. - // //TODO: implements - // // Map<String, String> parameters = new HashMap<String, String>(); - // // parameters.put("sessionId", ClientSessionManager.getSessionId()); - // // parameters.put("queryId", Integer.toString(transactionJoinId)); - // // String url = - // // HttpUrlBuilder.getInstance().getOsgiServletServiceUrl(OseeServerContext.SEARCH_TAGGING_CONTEXT, - // // parameters); - // // String response = HttpProcessor.delete(new URL(url)); - // - // } catch (Exception ex) { - // OseeLog.log(Activator.class, Level.WARNING, "Error Deleting Tags during purge.", ex); - // } - } - - @Override - public void handleArtifactsChangeTypeEvent(Sender sender, int toArtifactTypeId, LoadedArtifacts loadedArtifacts) { - // Need to fix tags based on this event - } - - @Override - public void handleTransactionsDeletedEvent(Sender sender, int[] transactionIds) { - // Need to fix tags based on this event - } - - @Override - public void handleTransactionEvent(Sender sender, TransactionEvent transEvent) { - // Need to fix tags based on this event - } - - @Override - public void handleFrameworkTransactionEvent(Sender sender, FrameworkTransactionData txData) throws OseeCoreException { - if (sender.isRemote()) { - return; - } - TagService taggingInfo = new TagService(); - for (ArtifactTransactionModifiedEvent event : txData.getXModifiedEvents()) { - if (event instanceof ArtifactModifiedEvent) { - for (SkynetAttributeChange change : ((ArtifactModifiedEvent) event).getAttributeChanges()) { - if (AttributeTypeManager.getType(change.getTypeId()).isTaggable()) { - taggingInfo.add(change.getGammaId()); - } - } - } - } - if (taggingInfo.size() > 0) { - Future<?> future = executor.submit(taggingInfo); - if (DbUtil.isDbInit()) { - try { - future.get(); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, "Error while waiting for tagger to complete.", ex); - } - } - } - } - - @Override - public List<? extends IEventFilter> getEventFilters() { - return null; - } - - @Override - public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { - try { - if (sender.isRemote()) { - return; - } - TagService taggingInfo = new TagService(); - for (ArtifactTransactionModifiedEvent event : artifactEvent.getSkynetTransactionDetails()) { - if (event instanceof ArtifactModifiedEvent) { - for (SkynetAttributeChange change : ((ArtifactModifiedEvent) event).getAttributeChanges()) { - if (AttributeTypeManager.getType(change.getTypeId()).isTaggable()) { - taggingInfo.add(change.getGammaId()); - } - } - } - } - if (taggingInfo.size() > 0) { - Future<?> future = executor.submit(taggingInfo); - if (DbUtil.isDbInit()) { - try { - future.get(); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, "Error while waiting for tagger to complete.", ex); - } - } - } - } catch (OseeCoreException ex1) { - OseeLog.log(Activator.class, Level.SEVERE, ex1); - return; - } - } - - @Override - public void handleBranchEvent(Sender sender, BranchEvent branchEvent) { - // Need to fix tags based on this event - } - - } } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/EventSystemPreferences.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/EventSystemPreferences.java new file mode 100644 index 00000000000..f0ede4ee6f7 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/EventSystemPreferences.java @@ -0,0 +1,97 @@ +/*******************************************************************************
+ * 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;
+
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.database.core.OseeInfo;
+import org.eclipse.osee.framework.jdk.core.util.OseeProperties;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.internal.Activator;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public final class EventSystemPreferences {
+ // This will disable all Local TransactionEvents and enable loop-back routing of Remote TransactionEvents back
+ // through the RemoteEventService as if they came from another client. This is for testing purposes only and
+ // should be reset to false before release.
+ private boolean enableRemoteEventLoopback = false;
+ private boolean disableEvents = false;
+ private boolean pendRunning = false;
+
+ public boolean isDisableEvents() {
+ return disableEvents;
+ }
+
+ public void setDisableEvents(boolean disableEvents) {
+ this.disableEvents = disableEvents;
+ }
+
+ public boolean isEnableRemoteEventLoopback() {
+ return enableRemoteEventLoopback;
+ }
+
+ public void setEnableRemoteEventLoopback(boolean enableRemoteEventLoopback) {
+ this.enableRemoteEventLoopback = enableRemoteEventLoopback;
+ }
+
+ /**
+ * If true, all listeners will be called back in main thread. For testing purposes only.
+ */
+ public void setPendRunning(boolean pendRunning) {
+ this.pendRunning = pendRunning;
+ }
+
+ public boolean isPendRunning() {
+ return pendRunning;
+ }
+
+ public boolean isNewEvents() {
+ try {
+ String dbProperty = OseeInfo.getCachedValue("eventSystem");
+ if (Strings.isValid(dbProperty)) {
+ return dbProperty.equals("new");
+ }
+ } catch (OseeDataStoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ if (!Strings.isValid(getEventSystemType())) {
+ return false;
+ }
+ return getEventSystemType().equals("new");
+ }
+
+ public void setNewEvents(boolean enabled) {
+ System.setProperty("eventSystem", enabled ? "new" : "old");
+ }
+
+ public boolean isOldEvents() {
+ return !isNewEvents();
+ }
+
+ public String getEventSystemType() {
+ return System.getProperty("eventSystem");
+ }
+
+ public String getEventDebug() {
+ return System.getProperty("eventDebug");
+ }
+
+ public String getOseeEventBrokerUri() {
+ return OseeProperties.getOseeDefaultBrokerUri();
+ }
+
+ public boolean isOseeEventBrokerValid() {
+ return Strings.isValid(getOseeEventBrokerUri());
+ }
+}
\ 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 new file mode 100644 index 00000000000..06012ea4c81 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/EventUtil.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * 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; + +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.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.internal.Activator; + +/** + * @author Roberto E. Escobar + */ +public final class EventUtil { + + private EventUtil() { + // Utility Class + } + + public static String getObjectSafeName(Object object) { + try { + return object.toString(); + } catch (Exception ex) { + return object.getClass().getSimpleName() + " - exception on toString: " + ex.getLocalizedMessage(); + } + } + + 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 output, Exception ex) { + try { + if (isEventDebugConsole()) { + System.err.println(output + (ex != null ? " <<ERROR>> " + ex.toString() : "")); + } else if (isEventDebugErrorLog()) { + if (ex != null) { + OseeLog.log(Activator.class, Level.SEVERE, output, ex); + } else { + OseeLog.log(Activator.class, Level.FINE, output); + } + } + } catch (Exception ex1) { + OseeLog.log(Activator.class, Level.SEVERE, ex1); + } + } + + private static boolean isEventDebugConsole() { + if (!Strings.isValid(System.getProperty("eventDebug"))) { + return false; + } + return System.getProperty("eventDebug").equals("console"); + } + + 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")); + } + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/FrameworkTransactionData.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/FrameworkTransactionData.java index 2c79380d957..816dc24c661 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/FrameworkTransactionData.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/FrameworkTransactionData.java @@ -13,19 +13,12 @@ package org.eclipse.osee.framework.skynet.core.event; import java.util.Collection; import java.util.HashSet; import java.util.Set; -import java.util.logging.Level; import org.eclipse.osee.framework.core.data.IRelationType; 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.artifact.ArtifactModType; 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.internal.Activator; -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.RelationTypeManager; +import org.eclipse.osee.framework.skynet.core.event.systems.FrameworkTransationDataCompacter; import org.eclipse.osee.framework.ui.plugin.event.UnloadedArtifact; import org.eclipse.osee.framework.ui.plugin.event.UnloadedRelation; @@ -48,7 +41,7 @@ import org.eclipse.osee.framework.ui.plugin.event.UnloadedRelation; */ public class FrameworkTransactionData { - Collection<ArtifactTransactionModifiedEvent> xModifiedEvents; + private Collection<ArtifactTransactionModifiedEvent> xModifiedEvents; // artifact collections of artifacts based on artifactModType that are currently loaded in the client's artifact cache public Set<Artifact> cacheChangedArtifacts = new HashSet<Artifact>(); @@ -255,161 +248,7 @@ public class FrameworkTransactionData { public void setXModifiedEvents(Collection<ArtifactTransactionModifiedEvent> modifiedEvents) { xModifiedEvents = modifiedEvents; - createTransactionDataRollup(); - } - - private void createTransactionDataRollup() { - // Roll-up change information - - for (ArtifactTransactionModifiedEvent xModifiedEvent : getXModifiedEvents()) { - if (xModifiedEvent instanceof ArtifactModifiedEvent) { - ArtifactModifiedEvent xArtifactModifiedEvent = (ArtifactModifiedEvent) xModifiedEvent; - if (xArtifactModifiedEvent.artifactModType == ArtifactModType.Added) { - if (xArtifactModifiedEvent.artifact != null) { - cacheAddedArtifacts.add(xArtifactModifiedEvent.artifact); - if (branchId == -1) { - branchId = xArtifactModifiedEvent.artifact.getBranch().getId(); - } - } else { - unloadedAddedArtifacts.add(xArtifactModifiedEvent.unloadedArtifact); - if (branchId == -1) { - branchId = xArtifactModifiedEvent.unloadedArtifact.getBranchId(); - } - } - } - if (xArtifactModifiedEvent.artifactModType == ArtifactModType.Deleted) { - if (xArtifactModifiedEvent.artifact != null) { - cacheDeletedArtifacts.add(xArtifactModifiedEvent.artifact); - if (branchId == -1) { - branchId = xArtifactModifiedEvent.artifact.getBranch().getId(); - } - } else { - unloadedDeletedArtifacts.add(xArtifactModifiedEvent.unloadedArtifact); - if (branchId == -1) { - branchId = xArtifactModifiedEvent.unloadedArtifact.getBranchId(); - } - } - } - if (xArtifactModifiedEvent.artifactModType == ArtifactModType.Changed) { - if (xArtifactModifiedEvent.artifact != null) { - cacheChangedArtifacts.add(xArtifactModifiedEvent.artifact); - if (branchId == -1) { - branchId = xArtifactModifiedEvent.artifact.getBranch().getId(); - } - } else { - unloadedChangedArtifacts.add(xArtifactModifiedEvent.unloadedArtifact); - if (branchId == -1) { - branchId = xArtifactModifiedEvent.unloadedArtifact.getBranchId(); - } - } - } - } - if (xModifiedEvent instanceof RelationModifiedEvent) { - RelationModifiedEvent xRelationModifiedEvent = (RelationModifiedEvent) xModifiedEvent; - UnloadedRelation unloadedRelation = xRelationModifiedEvent.unloadedRelation; - LoadedRelation loadedRelation = null; - // If link is loaded, get information from link - if (xRelationModifiedEvent.link != null) { - RelationLink link = xRelationModifiedEvent.link; - // Get artifact A/B if loaded in artifact cache - Artifact artA = ArtifactCache.getActive(link.getAArtifactId(), link.getABranch()); - Artifact artB = ArtifactCache.getActive(link.getBArtifactId(), link.getBBranch()); - try { - loadedRelation = - new LoadedRelation(artA, artB, xRelationModifiedEvent.link.getRelationType(), - xRelationModifiedEvent.branch, unloadedRelation); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - // Else, get information from unloadedRelation (if != null) - else if (unloadedRelation != null) { - Artifact artA = ArtifactCache.getActive(unloadedRelation.getArtifactAId(), unloadedRelation.getId()); - Artifact artB = ArtifactCache.getActive(unloadedRelation.getArtifactBId(), unloadedRelation.getId()); - if (artA != null || artB != null) { - try { - loadedRelation = - new LoadedRelation(artA, artB, RelationTypeManager.getType(unloadedRelation.getTypeId()), - artA != null ? artA.getBranch() : artB.getBranch(), unloadedRelation); - } catch (OseeCoreException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - } - if (xRelationModifiedEvent.relationEventType == RelationEventType.Added) { - if (loadedRelation != null) { - cacheAddedRelations.add(loadedRelation); - if (loadedRelation.getArtifactA() != null) { - cacheRelationAddedArtifacts.add(loadedRelation.getArtifactA()); - if (branchId == -1) { - branchId = loadedRelation.getArtifactA().getBranch().getId(); - } - } - if (loadedRelation.getArtifactB() != null) { - cacheRelationAddedArtifacts.add(loadedRelation.getArtifactB()); - if (branchId == -1) { - branchId = loadedRelation.getArtifactB().getBranch().getId(); - } - } - } - if (unloadedRelation != null) { - unloadedAddedRelations.add(unloadedRelation); - } - } - if (xRelationModifiedEvent.relationEventType == RelationEventType.Deleted) { - if (loadedRelation != null) { - cacheDeletedRelations.add(loadedRelation); - if (loadedRelation.getArtifactA() != null) { - cacheRelationDeletedArtifacts.add(loadedRelation.getArtifactA()); - if (branchId == -1) { - branchId = loadedRelation.getArtifactA().getBranch().getId(); - loadedRelation.getBranch(); - } - } - if (loadedRelation.getArtifactB() != null) { - cacheRelationDeletedArtifacts.add(loadedRelation.getArtifactB()); - if (branchId == -1) { - branchId = loadedRelation.getArtifactB().getBranch().getId(); - } - } - } - if (unloadedRelation != null) { - unloadedDeletedRelations.add(unloadedRelation); - if (branchId == -1) { - branchId = unloadedRelation.getId(); - } - } - } - if (xRelationModifiedEvent.relationEventType == RelationEventType.ModifiedRationale) { - if (loadedRelation != null) { - cacheChangedRelations.add(loadedRelation); - if (loadedRelation.getArtifactA() != null) { - cacheRelationChangedArtifacts.add(loadedRelation.getArtifactA()); - if (branchId == -1) { - branchId = loadedRelation.getArtifactA().getBranch().getId(); - } - } - if (loadedRelation.getArtifactB() != null) { - cacheRelationChangedArtifacts.add(loadedRelation.getArtifactB()); - if (branchId == -1) { - branchId = loadedRelation.getArtifactB().getBranch().getId(); - } - } - } - if (unloadedRelation != null) { - unloadedChangedRelations.add(unloadedRelation); - if (branchId == -1) { - branchId = unloadedRelation.getId(); - } - } - } - } - } - - // Clean out known duplicates - cacheChangedArtifacts.removeAll(cacheDeletedArtifacts); - cacheAddedArtifacts.removeAll(cacheDeletedArtifacts); - + FrameworkTransationDataCompacter.compact(this); } } 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 547f9a3c233..c270a0ed4cf 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,27 @@ *******************************************************************************/ package org.eclipse.osee.framework.skynet.core.event; +import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.logging.Level; -import org.eclipse.core.runtime.Platform; import org.eclipse.osee.framework.core.client.ClientSessionManager; import org.eclipse.osee.framework.core.data.OseeBranch; 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.core.exception.OseeDataStoreException; import org.eclipse.osee.framework.core.model.Branch; -import org.eclipse.osee.framework.database.core.OseeInfo; import org.eclipse.osee.framework.jdk.core.util.OseeProperties; -import org.eclipse.osee.framework.jdk.core.util.Strings; 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.artifact.ArtifactModType; +import org.eclipse.osee.framework.skynet.core.event.systems.EventManagerData; +import org.eclipse.osee.framework.skynet.core.event.systems.InternalEventManager2; +import org.eclipse.osee.framework.skynet.core.event.systems.LegacyEventManager; import org.eclipse.osee.framework.skynet.core.event2.AccessControlEvent; import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event2.BranchEvent; @@ -58,25 +59,141 @@ public class OseeEventManager { private static List<IEventFilter> commonBranchEventFilter; private static BranchGuidEventFilter commonBranchGuidEvenFilter; - private static Sender getSender(Object sourceObject) throws OseeAuthenticationRequiredException { + private static EventManagerData eventManagerData; + + private OseeEventManager() { + // Static methods only; + } + + public static void setEventManagerData(EventManagerData eventManagerData) { + OseeEventManager.eventManagerData = eventManagerData; + } + + /** + * Add a priority listener. This should only be done for caches where they need to be updated before all other + * 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(); + if (!priorityListeners.contains(listener)) { + priorityListeners.add(listener); + } + } + + public static void addListener(IEventListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener can not be null"); + } + Collection<IEventListener> listeners = eventManagerData.getListeners(); + if (!listeners.contains(listener)) { + listeners.add(listener); + } + } + + public static void removeAllListeners() { + eventManagerData.getListeners().clear(); + eventManagerData.getPriorityListeners().clear(); + } + + public static void removeListener(IEventListener listener) { + eventManagerData.getListeners().remove(listener); + eventManagerData.getPriorityListeners().remove(listener); + } + + private static LegacyEventManager getLegacyEventManager() { + return eventManagerData.getLegacyEventManager(); + } + + private static InternalEventManager2 getEventManager() { + return eventManagerData.getMessageEventManager(); + } + + public static EventSystemPreferences getPreferences() { + return eventManagerData.getPreferences(); + } + + public static boolean isLegacyEventManagerConnected() { + return getLegacyEventManager() != null ? getLegacyEventManager().isConnected() : false; + } + + public static boolean isEventManagerConnected() { + return getEventManager() != null ? getEventManager().isConnected() : false; + } + + public static String getLegacyConnectionDetails() { + StringBuilder sb = new StringBuilder(); + sb.append("osee.jini.lookup.groups ["); + sb.append(System.getProperty("osee.jini.lookup.groups")); + sb.append("]"); + sb.append("eventSystem ["); + sb.append(getPreferences().getEventSystemType()); + sb.append("]"); + return sb.toString(); + } + + public static String getConnectionDetails() { + EventSystemPreferences preferences = getPreferences(); + StringBuilder sb = new StringBuilder(); + sb.append("oseeEventBrokerUri [" + preferences.getOseeEventBrokerUri() + "]"); + sb.append("eventDebug [" + preferences.getEventDebug() + "]"); + sb.append("eventSystem [" + preferences.getEventSystemType() + "]"); + return sb.toString(); + } + + public static int getNumberOfListeners() { + int toReturn = -1; + if (isOldEvents() || isNewEvents()) { + toReturn = eventManagerData.getListeners().size(); + } + return toReturn; + } + + 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()) { - return (Sender) sourceObject; + 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 { + if (isNewEvents()) { + getEventManager().testSendRemoteEventThroughFrameworkListener(remoteEvent); + } + } + + // Only Used for Testing purposes + public static void internalTestProcessBranchEvent(Sender sender, BranchEvent branchEvent) { + if (isNewEvents()) { + getEventManager().processBranchEvent(sender, branchEvent); + } + } + + // Only Used for Testing purposes + public static void internalTestProcessEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) { + if (isNewEvents()) { + getEventManager().processEventArtifactsAndRelations(sender, artifactEvent); } - // Else, create new sender based on sourceObject - return new Sender(sourceObject, ClientSessionManager.getSession()); } // Kick LOCAL remote-event event public static void kickLocalRemEvent(Object source, RemoteEventServiceEventType remoteEventServiceEventType) throws OseeCoreException { - if (InternalEventManager.isDisableEvents()) { + if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickRemoteEventManagerEvent(getSender(source), remoteEventServiceEventType); + if (isOldEvents()) { + getLegacyEventManager().kickRemoteEventManagerEvent(createSender(source), remoteEventServiceEventType); } - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.kickLocalRemEvent(getSender(source), remoteEventServiceEventType); + if (isNewEvents()) { + getEventManager().kickLocalRemEvent(createSender(source), remoteEventServiceEventType); } } @@ -85,31 +202,31 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickBroadcastEvent(getSender(source), broadcastEvent.getBroadcastEventType(), + if (isOldEvents()) { + getLegacyEventManager().kickBroadcastEvent(createSender(source), broadcastEvent.getBroadcastEventType(), broadcastEvent.getUsers().toArray(new String[broadcastEvent.getUsers().size()]), broadcastEvent.getMessage()); } - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.kickBroadcastEvent(getSender(source), broadcastEvent); + if (isNewEvents()) { + getEventManager().kickBroadcastEvent(createSender(source), broadcastEvent); } } //Kick LOCAL and REMOTE branch events public static void kickBranchEvent(Object source, BranchEvent branchEvent, int branchId) throws OseeCoreException { - eventLog("OEM: kickBranchEvent: type: " + branchEvent.getEventType() + " guid: " + branchEvent.getBranchGuid() + " - " + source); + EventUtil.eventLog("OEM: kickBranchEvent: type: " + branchEvent.getEventType() + " guid: " + branchEvent.getBranchGuid() + " - " + source); if (testBranchEventListener != null) { - testBranchEventListener.handleBranchEventREM1(getSender(source), branchEvent.getEventType(), branchId); + testBranchEventListener.handleBranchEventREM1(createSender(source), branchEvent.getEventType(), branchId); } if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickBranchEvent(getSender(source), branchEvent.getEventType(), branchId); + if (isOldEvents()) { + getLegacyEventManager().kickBranchEvent(createSender(source), branchEvent.getEventType(), branchId); } - branchEvent.setNetworkSender(getSender(source).getNetworkSender()); - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.kickBranchEvent(getSender(source), branchEvent); + branchEvent.setNetworkSender(createSender(source).getNetworkSender()); + if (isNewEvents()) { + getEventManager().kickBranchEvent(createSender(source), branchEvent); } } @@ -118,8 +235,8 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickMergeBranchEvent(getSender(source), branchEventType, branchId); + if (isOldEvents()) { + getLegacyEventManager().kickMergeBranchEvent(createSender(source), branchEventType, branchId); // Handled by kickMergeBranchEvent for new Events } } @@ -129,12 +246,13 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - accessControlEvent.setNetworkSender(getSender(source).getNetworkSender()); - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickAccessControlArtifactsEvent(getSender(source), accessControlEvent, loadedArtifacts); + accessControlEvent.setNetworkSender(createSender(source).getNetworkSender()); + if (isOldEvents()) { + getLegacyEventManager().kickAccessControlArtifactsEvent(createSender(source), accessControlEvent, + loadedArtifacts); } - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.kickAccessControlArtifactsEvent(getSender(source), accessControlEvent); + if (isNewEvents()) { + getEventManager().kickAccessControlArtifactsEvent(createSender(source), accessControlEvent); } } @@ -143,8 +261,8 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickArtifactModifiedEvent(getSender(source), artifactModType, artifact); + if (isOldEvents()) { + getLegacyEventManager().kickArtifactModifiedEvent(createSender(source), artifactModType, artifact); } } @@ -153,8 +271,8 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickRelationModifiedEvent(getSender(source), relationEventType, link, branch, + if (isOldEvents()) { + getLegacyEventManager().kickRelationModifiedEvent(createSender(source), relationEventType, link, branch, relationType); } } @@ -164,8 +282,8 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickArtifactsPurgedEvent(getSender(source), loadedArtifacts); + if (isOldEvents()) { + getLegacyEventManager().kickArtifactsPurgedEvent(createSender(source), loadedArtifacts); // Handled by kickTransactionEvent for new Events } } @@ -175,8 +293,8 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickArtifactsChangeTypeEvent(getSender(source), toArtifactTypeId, loadedArtifacts); + if (isOldEvents()) { + getLegacyEventManager().kickArtifactsChangeTypeEvent(createSender(source), toArtifactTypeId, loadedArtifacts); // Handled by kickTransactionEvent for new Events } } @@ -196,11 +314,11 @@ public class OseeEventManager { transIds[x++] = value.intValue(); } if (transactionEvent.getEventType() == TransactionEventType.Purged && OseeEventManager.isOldEvents()) { - InternalEventManager.kickTransactionsPurgedEvent(getSender(source), transIds); + getLegacyEventManager().kickTransactionsPurgedEvent(createSender(source), transIds); } - transactionEvent.setNetworkSender(getSender(source).getNetworkSender()); - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.kickTransactionEvent(getSender(source), transactionEvent); + transactionEvent.setNetworkSender(createSender(source).getNetworkSender()); + if (isNewEvents()) { + getEventManager().kickTransactionEvent(createSender(source), transactionEvent); } } @@ -210,11 +328,11 @@ public class OseeEventManager { return; } if (artifactEvent.getSkynetTransactionDetails() != null && OseeEventManager.isOldEvents()) { - InternalEventManager.kickPersistEvent(getSender(source), artifactEvent.getSkynetTransactionDetails()); + getLegacyEventManager().kickPersistEvent(createSender(source), artifactEvent.getSkynetTransactionDetails()); } - artifactEvent.setNetworkSender(getSender(source).getNetworkSender()); - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.kickArtifactEvent(getSender(source), artifactEvent); + artifactEvent.setNetworkSender(createSender(source).getNetworkSender()); + if (isNewEvents()) { + getEventManager().kickArtifactEvent(createSender(source), artifactEvent); } } @@ -223,66 +341,35 @@ public class OseeEventManager { if (isDisableEvents()) { return; } - if (OseeEventManager.isOldEvents()) { - InternalEventManager.kickArtifactReloadEvent(getSender(source), artifacts); + if (isOldEvents()) { + getLegacyEventManager().kickArtifactReloadEvent(createSender(source), artifacts); } ArtifactEvent artifactEvent = new ArtifactEvent(artifacts.iterator().next().getBranch()); artifactEvent.getArtifacts().addAll(EventBasicGuidArtifact.get(EventModType.Reloaded, artifacts)); - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.kickLocalArtifactReloadEvent(getSender(source), artifactEvent); - } - } - - /** - * Add a priority listener. This should only be done for caches where they need to be updated before all other - * listeners are called. - */ - public static void addPriorityListener(IEventListener listener) { - if (OseeEventManager.isOldEvents()) { - InternalEventManager.addPriorityListener(listener); - } - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.addPriorityListener(listener); - } - } - - public static void addListener(IEventListener listener) { - if (OseeEventManager.isOldEvents()) { - InternalEventManager.addListener(listener); - } - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.addListener(listener); - } - } - - public static void removeListener(IEventListener listener) { - if (OseeEventManager.isOldEvents()) { - InternalEventManager.removeListeners(listener); - } - if (OseeEventManager.isNewEvents()) { - InternalEventManager2.removeListeners(listener); + if (isNewEvents()) { + getEventManager().kickLocalArtifactReloadEvent(createSender(source), artifactEvent); } } public static boolean isDisableEvents() { - return InternalEventManager.isDisableEvents(); + return getPreferences().isDisableEvents(); } // Turn off all event processing including LOCAL and REMOTE public static void setDisableEvents(boolean disableEvents) { - InternalEventManager.setDisableEvents(disableEvents); - InternalEventManager2.setDisableEvents(disableEvents); + getPreferences().setDisableEvents(disableEvents); } // Return report showing all listeners registered public static String getListenerReport() { - if (OseeEventManager.isOldEvents()) { - return InternalEventManager.getListenerReport(); - } - if (OseeEventManager.isNewEvents()) { - return InternalEventManager2.getListenerReport(); - } - return "Neither event system is active"; + String toReturn; + if (isOldEvents() || isNewEvents()) { + toReturn = + EventUtil.getListenerReport(eventManagerData.getListeners(), eventManagerData.getPriorityListeners()); + } else { + toReturn = "Neither event system is active"; + } + return toReturn; } // Registration for branch events; for test only @@ -293,67 +380,18 @@ public class OseeEventManager { testBranchEventListener = branchEventListener; } - public static boolean isEventDebugConsole() { - if (!Strings.isValid(System.getProperty("eventDebug"))) { - return false; - } - return System.getProperty("eventDebug").equals("console"); - } - - public 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")); - } - /** * If old event kicks and listens should be used */ - public static boolean isOldEvents() { + private static boolean isOldEvents() { return !isNewEvents(); } /** * If new event kicks and listens should be used */ - public static boolean isNewEvents() { - try { - String dbProperty = OseeInfo.getCachedValue("eventSystem"); - if (Strings.isValid(dbProperty)) { - return dbProperty.equals("new"); - } - } catch (OseeDataStoreException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - if (!Strings.isValid(System.getProperty("eventSystem"))) { - return false; - } - return System.getProperty("eventSystem").equals("new"); - } - - public static void setNewEvents(boolean enabled) { - System.setProperty("eventSystem", enabled ? "new" : "old"); - } - - public static void eventLog(String output) { - eventLog(output, null); - } - - public static void eventLog(String output, Exception ex) { - try { - if (isEventDebugConsole()) { - System.err.println(output + (ex != null ? " <<ERROR>> " + ex.toString() : "")); - } else if (isEventDebugErrorLog()) { - if (ex != null) { - OseeLog.log(Activator.class, Level.SEVERE, output, ex); - } else { - OseeLog.log(Activator.class, Level.FINE, output); - } - } - } catch (Exception ex1) { - OseeLog.log(Activator.class, Level.SEVERE, ex1); - } + private static boolean isNewEvents() { + return getPreferences().isNewEvents(); } public static List<IEventFilter> getEventFiltersForBranch(Branch branch) { @@ -389,5 +427,4 @@ public class OseeEventManager { } return commonBranchGuidEvenFilter; } - } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager.java deleted file mode 100644 index c9bf7f358c7..00000000000 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager.java +++ /dev/null @@ -1,720 +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; - -import java.rmi.RemoteException; -import java.rmi.server.ExportException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; -import java.util.logging.Level; -import net.jini.core.entry.Entry; -import net.jini.core.lookup.ServiceItem; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.osee.framework.core.client.ClientSessionManager; -import org.eclipse.osee.framework.core.enums.BranchState; -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.cache.BranchCache; -import org.eclipse.osee.framework.core.model.type.RelationType; -import org.eclipse.osee.framework.jdk.core.util.GUID; -import org.eclipse.osee.framework.jini.discovery.EclipseJiniClassloader; -import org.eclipse.osee.framework.jini.discovery.IServiceLookupListener; -import org.eclipse.osee.framework.jini.discovery.ServiceDataStore; -import org.eclipse.osee.framework.jini.service.core.SimpleFormattedEntry; -import org.eclipse.osee.framework.jini.util.OseeJini; -import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.messaging.event.skynet.ASkynetEventListener; -import org.eclipse.osee.framework.messaging.event.skynet.ISkynetArtifactEvent; -import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEvent; -import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEventListener; -import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEventService; -import org.eclipse.osee.framework.messaging.event.skynet.ISkynetRelationLinkEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkAccessControlArtifactsEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactChangeTypeEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactDeletedEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactModifiedEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactPurgeEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkBroadcastEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkCommitBranchEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkDeletedBranchEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkNewBranchEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkPurgeBranchEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkRelationLinkCreatedEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkRelationLinkDeletedEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkRelationLinkRationalModifiedEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkRenameBranchEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkTransactionDeletedEvent; -import org.eclipse.osee.framework.messaging.event.skynet.event.SkynetAttributeChange; -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.ArtifactCache; -import org.eclipse.osee.framework.skynet.core.artifact.ArtifactModType; -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.search.ArtifactQuery; -import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; -import org.eclipse.osee.framework.skynet.core.event2.AccessControlEvent; -import org.eclipse.osee.framework.skynet.core.internal.Activator; -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; -import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts; -import org.eclipse.osee.framework.ui.plugin.event.UnloadedArtifact; -import org.eclipse.osee.framework.ui.plugin.event.UnloadedRelation; - -/** - * Manages remote events from the SkynetEventService. - * - * @author Jeff C. Phillips - * @author Donald G. Dunne - */ -public class RemoteEventManager { - private static String ACCEPTABLE_SERVICE; - - private static final RemoteEventManager instance = new RemoteEventManager(); - - private final InternalSkynetEventManager internalSkynetEventManager; - private final ISkynetEventListener clientEventListener; - private ISkynetEventListener clientEventListenerRemoteReference; - - private RemoteEventManager() { - super(); - if (OseeEventManager.isOldEvents()) { - OseeLog.log(Activator.class, Level.INFO, "REM1 Enabled"); - internalSkynetEventManager = new InternalSkynetEventManager(); - clientEventListener = new EventListener(); - checkJiniRegistration(); - } else { - OseeLog.log(Activator.class, Level.INFO, "REM1 Disabled"); - internalSkynetEventManager = null; - clientEventListener = null; - } - } - - private void checkJiniRegistration() { - if (OseeEventManager.isNewEvents()) { - return; - } - if (clientEventListenerRemoteReference == null) { - try { - // We need to trigger authentication before attempting to get database information from client session manager. - UserManager.getUser(); - ACCEPTABLE_SERVICE = - ClientSessionManager.getDataStoreName() + ":" + ClientSessionManager.getDataStoreLoginName(); - clientEventListenerRemoteReference = - (ISkynetEventListener) OseeJini.getRemoteReference(clientEventListener); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - clientEventListenerRemoteReference = null; - } - - if (clientEventListenerRemoteReference != null) { - ServiceDataStore.getEclipseInstance(EclipseJiniClassloader.getInstance()).addListener( - internalSkynetEventManager, ISkynetEventService.class); - } - } - } - - private static ISkynetEventListener getClientEventListenerRemoteReference() { - instance.checkJiniRegistration(); - return instance.clientEventListenerRemoteReference; - } - - private static InternalSkynetEventManager getEventServiceManager() { - return instance.internalSkynetEventManager; - } - - public static void deregisterFromRemoteEventManager() { - if (OseeEventManager.isNewEvents()) { - return; - } - ServiceDataStore.getEclipseInstance(EclipseJiniClassloader.getInstance()).removeListener(getEventServiceManager()); - getEventServiceManager().reset(); - } - - public static void kick(Collection<ISkynetEvent> events) { - kick(events.toArray(new ISkynetEvent[events.size()])); - } - - public static boolean isConnected() { - return OseeEventManager.isOldEvents() && getEventServiceManager().isValid(); - } - - public static String getConnectionProperties() { - StringBuilder sb = new StringBuilder(); - sb.append("osee.jini.lookup.groups [" + System.getProperty("osee.jini.lookup.groups") + "]"); - sb.append("eventSystem [" + System.getProperty("eventSystem") + "]"); - - return sb.toString(); - } - - public static void kick(final ISkynetEvent... events) { - if (OseeEventManager.isOldEvents() && isConnected()) { - Job job = new Job("Send Event") { - @Override - protected IStatus run(IProgressMonitor monitor) { - getEventServiceManager().kick(events, getClientEventListenerRemoteReference()); - return Status.OK_STATUS; - } - }; - - job.schedule(); - } - /* - * This 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. - */ - if (InternalEventManager.isEnableRemoteEventLoopback()) { - OseeEventManager.eventLog("REM: Loopback enabled - Returning events as Remote event."); - Thread thread = new Thread() { - @Override - public void run() { - try { - String newSessionId = GUID.create(); - for (ISkynetEvent event : events) { - event.getNetworkSender().sessionId = newSessionId; - } - instance.clientEventListener.onEvent(events); - } catch (RemoteException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - - } - } - }; - thread.start(); - } - } - - private static class InternalSkynetEventManager implements IServiceLookupListener { - private ISkynetEventService currentEventService; - - private InternalSkynetEventManager() { - currentEventService = null; - } - - public ISkynetEventService getReference() { - return currentEventService; - } - - public boolean isValid() { - return isValidService(currentEventService); - } - - public void reset() { - setEventService(null); - } - - public void kick(ISkynetEvent[] events, ISkynetEventListener... except) { - try { - getReference().kick(events, except); - } catch (ExportException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } catch (RemoteException ex) { - disconnectService(ex); - } - } - - private boolean isValidService(ISkynetEventService service) { - boolean result = false; - try { - if (service != null) { - result = service.isAlive(); - } - } catch (Exception ex) { - // Do Nothing - result = false; - } - return result; - } - - private synchronized void setEventService(ISkynetEventService service) { - if (isValidService(currentEventService)) { - try { - currentEventService.deregister(getClientEventListenerRemoteReference()); - } catch (RemoteException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - currentEventService = service; - } - - private void disconnectService(Exception e) { - if (OseeEventManager.isNewEvents()) { - return; - } - OseeLog.log(Activator.class, Level.WARNING, "Skynet Event Service connection lost\n" + e.toString(), e); - setEventService(null); - try { - OseeEventManager.kickLocalRemEvent(instance, RemoteEventServiceEventType.Rem1_DisConnected); - } catch (OseeCoreException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - - private void connectToService(ISkynetEventService service) { - if (OseeEventManager.isNewEvents()) { - return; - } - try { - ISkynetEventListener clientListener = getClientEventListenerRemoteReference(); - if (clientListener != null) { - service.register(clientListener); - setEventService(service); - OseeLog.log(Activator.class, Level.INFO, - "Skynet Event Service connection established " + ACCEPTABLE_SERVICE); - OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem1_Connected); - } else { - OseeLog.log(Activator.class, Level.SEVERE, "Client listener reference was null"); - } - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - - @Override - public void serviceAdded(ServiceItem serviceItem) { - if (OseeEventManager.isNewEvents()) { - return; - } - if (serviceItem.service instanceof ISkynetEventService) { - ISkynetEventService service = (ISkynetEventService) serviceItem.service; - if (isValidService(service)) { - // Check if the service is for the database we are using - for (Entry entry : serviceItem.attributeSets) { - if (entry instanceof SimpleFormattedEntry) { - SimpleFormattedEntry simpleEntry = (SimpleFormattedEntry) entry; - if ("db".equals(simpleEntry.name) && ACCEPTABLE_SERVICE.equals(simpleEntry.value)) { - connectToService(service); - break; - } - } - } - } - } - } - - @Override - public void serviceChanged(ServiceItem serviceItem) { - serviceAdded(serviceItem); - } - - @Override - public void serviceRemoved(ServiceItem serviceItem) { - // do nothing - } - } - - private static class EventListener extends ASkynetEventListener { - private static final long serialVersionUID = -3017349745450262540L; - private static final ISchedulingRule mutexRule = new ISchedulingRule() { - - @Override - public boolean contains(ISchedulingRule rule) { - return rule == this; - } - - @Override - public boolean isConflicting(ISchedulingRule rule) { - return rule == this; - } - }; - - @Override - public void onEvent(final ISkynetEvent[] events) { - - final List<ArtifactTransactionModifiedEvent> xModifiedEvents = - new LinkedList<ArtifactTransactionModifiedEvent>(); - Job job = new Job("Receive Event") { - - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - Sender lastArtifactRelationModChangeSender = null; - - for (ISkynetEvent event : events) { - - Sender sender = new Sender(event.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()) { - continue; - } - - if (event instanceof NetworkAccessControlArtifactsEvent) { - try { - AccessControlEvent accessControlEvent = new AccessControlEvent(); - AccessControlEventType accessControlModType = - AccessControlEventType.valueOf(((NetworkAccessControlArtifactsEvent) event).getAccessControlModTypeName()); - accessControlEvent.setEventType(accessControlModType); - NetworkAccessControlArtifactsEvent accessEvent = (NetworkAccessControlArtifactsEvent) event; - Integer[] artIds = - accessEvent.getArtifactIds().toArray(new Integer[accessEvent.getArtifactIds().size()]); - Branch branch = BranchManager.getBranch(accessEvent.getId()); - for (int x = 0; x < accessEvent.getArtifactIds().size(); x++) { - Artifact cachedArt = ArtifactQuery.getArtifactFromId(artIds[x], branch); - if (cachedArt != null) { - accessControlEvent.getArtifacts().add(cachedArt.getBasicGuidArtifact()); - } - } - LoadedArtifacts loadedArtifacts = - new LoadedArtifacts(accessEvent.getId(), accessEvent.getArtifactIds(), - accessEvent.getArtifactTypeIds()); - InternalEventManager.kickAccessControlArtifactsEvent(sender, accessControlEvent, - loadedArtifacts); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkRenameBranchEvent) { - int branchId = ((NetworkRenameBranchEvent) event).getId(); - try { - Branch branch = BranchManager.getBranch(branchId); - branch.setName(((NetworkRenameBranchEvent) event).getBranchName()); - branch.clearDirty(); - try { - InternalEventManager.kickBranchEvent(sender, BranchEventType.Renamed, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkNewBranchEvent) { - int branchId = ((NetworkNewBranchEvent) event).getId(); - try { - InternalEventManager.kickBranchEvent(sender, BranchEventType.Added, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkDeletedBranchEvent) { - int branchId = ((NetworkDeletedBranchEvent) event).getId(); - try { - Branch branch = - Activator.getInstance().getOseeCacheService().getBranchCache().getById(branchId); - if (branch != null) { - branch.setBranchState(BranchState.DELETED); - branch.clearDirty(); - } - InternalEventManager.kickBranchEvent(sender, BranchEventType.Deleted, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkPurgeBranchEvent) { - int branchId = ((NetworkPurgeBranchEvent) event).getId(); - try { - BranchCache cache = Activator.getInstance().getOseeCacheService().getBranchCache(); - Branch branch = cache.getById(branchId); - if (branch != null) { - cache.decache(branch); - } - InternalEventManager.kickBranchEvent(sender, BranchEventType.Purged, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkCommitBranchEvent) { - int branchId = ((NetworkCommitBranchEvent) event).getId(); - try { - try { - TransactionManager.clearCommitArtifactCacheForAssociatedArtifact(BranchManager.getAssociatedArtifact(BranchManager.getBranch(branchId))); - } catch (OseeCoreException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - InternalEventManager.kickBranchEvent(sender, BranchEventType.Committed, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkBroadcastEvent) { - try { - final BroadcastEventType broadcastEventType = - BroadcastEventType.valueOf(((NetworkBroadcastEvent) event).getBroadcastEventTypeName()); - if (broadcastEventType == null) { - OseeLog.log( - Activator.class, - Level.SEVERE, - "Unknown broadcast event type \"" + ((NetworkBroadcastEvent) event).getBroadcastEventTypeName() + "\"", - new IllegalArgumentException()); - } else { - InternalEventManager.kickBroadcastEvent(sender, broadcastEventType, - ((NetworkBroadcastEvent) event).getUserIds(), - ((NetworkBroadcastEvent) event).getMessage()); - } - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof ISkynetArtifactEvent) { - try { - updateArtifacts(sender, (ISkynetArtifactEvent) event, xModifiedEvents); - lastArtifactRelationModChangeSender = sender; - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof ISkynetRelationLinkEvent) { - try { - updateRelations(sender, (ISkynetRelationLinkEvent) event, xModifiedEvents); - lastArtifactRelationModChangeSender = sender; - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkArtifactChangeTypeEvent) { - try { - LoadedArtifacts loadedArtifacts = - new LoadedArtifacts(((NetworkArtifactChangeTypeEvent) event).getId(), - ((NetworkArtifactChangeTypeEvent) event).getArtifactIds(), - ((NetworkArtifactChangeTypeEvent) event).getArtifactTypeIds()); - InternalEventManager.kickArtifactsChangeTypeEvent(sender, - ((NetworkArtifactChangeTypeEvent) event).getToArtifactTypeId(), loadedArtifacts); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkArtifactPurgeEvent) { - try { - LoadedArtifacts loadedArtifacts = - new LoadedArtifacts(((NetworkArtifactPurgeEvent) event).getId(), - ((NetworkArtifactPurgeEvent) event).getArtifactIds(), - ((NetworkArtifactPurgeEvent) event).getArtifactTypeIds()); - for (Artifact artifact : loadedArtifacts.getLoadedArtifacts()) { - //This is because applications may still have a reference to the artifact - for (RelationLink link : RelationManager.getRelationsAll(artifact.getArtId(), - artifact.getBranch().getId(), false)) { - link.internalRemoteEventDelete(); - } - ArtifactCache.deCache(artifact); - artifact.internalSetDeleted(); - } - InternalEventManager.kickArtifactsPurgedEvent(sender, loadedArtifacts); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkTransactionDeletedEvent) { - try { - InternalEventManager.kickTransactionsPurgedEvent(sender, - ((NetworkTransactionDeletedEvent) event).getTransactionIds()); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - } - - if (xModifiedEvents.size() > 0) { - /* - * Since transaction events are a collection of ArtifactModfied and RelationModified events, create - * a new Sender based on the last sender for these events. - */ - Sender transactionSender = - new Sender("RemoteEventManager", lastArtifactRelationModChangeSender.getOseeSession()); - InternalEventManager.kickPersistEvent(transactionSender, xModifiedEvents); - } - } catch (Exception ex) { - // don't want exceptions poping up; just log and return nicely - OseeLog.log(Activator.class, Level.SEVERE, "REM Receive Event Exception", ex); - } - return Status.OK_STATUS; - } - - }; - job.setSystem(true); - job.setUser(false); - job.setRule(mutexRule); - job.schedule(); - } - - /** - * Updates local cache - * - * @param event - */ - private static void updateArtifacts(Sender sender, ISkynetArtifactEvent event, Collection<ArtifactTransactionModifiedEvent> xModifiedEvents) { - if (event == null) { - return; - } - - try { - int artId = event.getArtId(); - int artTypeId = event.getArtTypeId(); - List<String> dirtyAttributeName = new LinkedList<String>(); - - if (event instanceof NetworkArtifactModifiedEvent) { - int branchId = ((NetworkArtifactModifiedEvent) event).getId(); - Artifact artifact = ArtifactCache.getActive(artId, branchId); - if (artifact == null) { - UnloadedArtifact unloadedArtifact = new UnloadedArtifact(branchId, artId, artTypeId); - xModifiedEvents.add(new ArtifactModifiedEvent(sender, ArtifactModType.Changed, unloadedArtifact)); - } else if (!artifact.isHistorical()) { - for (SkynetAttributeChange skynetAttributeChange : ((NetworkArtifactModifiedEvent) event).getAttributeChanges()) { - if (!InternalEventManager.isEnableRemoteEventLoopback()) { - try { - Attribute<?> attribute = - artifact.getAttributeById(skynetAttributeChange.getAttributeId(), true); - // Attribute already exists (but may be deleted), process update - // Process MODIFIED / DELETED attribute - if (attribute != null) { - if (attribute.isDirty()) { - dirtyAttributeName.add(attribute.getNameValueDescription()); - OseeEventManager.eventLog(String.format( - "%s's attribute %d [/n%s/n] has been overwritten.", artifact.getSafeName(), - attribute.getId(), attribute.toString())); - } - try { - ModificationType modificationType = skynetAttributeChange.getModificationType(); - if (modificationType == null) { - OseeLog.log( - Activator.class, - Level.SEVERE, - String.format("MOD1: Can't get mod type for %s's attribute %d.", - artifact.getArtifactTypeName(), skynetAttributeChange.getAttributeId())); - continue; - } - if (modificationType.isDeleted()) { - attribute.internalSetModificationType(modificationType); - } else { - attribute.getAttributeDataProvider().loadData(skynetAttributeChange.getData()); - } - attribute.internalSetGammaId(skynetAttributeChange.getGammaId()); - attribute.setNotDirty(); - } catch (OseeCoreException ex) { - OseeEventManager.eventLog( - String.format("Exception updating %s's attribute %d [/n%s/n].", - artifact.getSafeName(), attribute.getId(), attribute.toString()), ex); - } - } - // Otherwise, attribute needs creation - // Process NEW attribute - else { - ModificationType modificationType = skynetAttributeChange.getModificationType(); - if (modificationType == null) { - OseeLog.log( - Activator.class, - Level.SEVERE, - String.format("MOD2: Can't get mod type for %s's attribute %d.", - artifact.getArtifactTypeName(), skynetAttributeChange.getAttributeId())); - continue; - } - artifact.internalInitializeAttribute( - AttributeTypeManager.getType(skynetAttributeChange.getTypeId()), - skynetAttributeChange.getAttributeId(), skynetAttributeChange.getGammaId(), - modificationType, false, skynetAttributeChange.getData()); - } - } catch (OseeCoreException ex) { - OseeEventManager.eventLog(String.format( - "Exception updating %s's attribute change for attributeTypeId %d.", - artifact.getSafeName(), skynetAttributeChange.getTypeId()), ex); - } - } - } - - xModifiedEvents.add(new ArtifactModifiedEvent(sender, ArtifactModType.Changed, artifact, - ((NetworkArtifactModifiedEvent) event).getTransactionId(), - ((NetworkArtifactModifiedEvent) event).getAttributeChanges())); - - } - } else if (event instanceof NetworkArtifactDeletedEvent) { - int branchId = ((NetworkArtifactDeletedEvent) event).getId(); - Artifact artifact = ArtifactCache.getActive(artId, branchId); - if (artifact == null) { - UnloadedArtifact unloadedArtifact = new UnloadedArtifact(branchId, artId, artTypeId); - xModifiedEvents.add(new ArtifactModifiedEvent(sender, ArtifactModType.Deleted, unloadedArtifact)); - } else if (!artifact.isHistorical()) { - internalHandleRemoteArtifactDeleted(artifact); - - xModifiedEvents.add(new ArtifactModifiedEvent(sender, ArtifactModType.Deleted, artifact, - ((NetworkArtifactDeletedEvent) event).getTransactionId(), new ArrayList<SkynetAttributeChange>())); - } - } - } catch (OseeCoreException ex) { - OseeEventManager.eventLog("Update Artifacts", ex); - } - } - - private static void updateRelations(Sender sender, ISkynetRelationLinkEvent event, Collection<ArtifactTransactionModifiedEvent> xModifiedEvents) { - if (event == null) { - return; - } - - try { - RelationType relationType = RelationTypeManager.getType(event.getRelTypeId()); - Branch branch = BranchManager.getBranch(event.getId()); - Artifact aArtifact = ArtifactCache.getActive(event.getArtAId(), branch.getId()); - Artifact bArtifact = ArtifactCache.getActive(event.getArtBId(), branch.getId()); - boolean aArtifactLoaded = aArtifact != null; - boolean bArtifactLoaded = bArtifact != null; - - if (!aArtifactLoaded && !bArtifactLoaded) { - if (event instanceof NetworkRelationLinkDeletedEvent) { - UnloadedRelation unloadedRelation = - new UnloadedRelation(branch.getId(), event.getArtAId(), event.getArtATypeId(), event.getArtBId(), - event.getArtBTypeId(), event.getRelTypeId()); - xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.Deleted, unloadedRelation)); - } else if (event instanceof NetworkRelationLinkRationalModifiedEvent) { - UnloadedRelation unloadedRelation = - new UnloadedRelation(branch.getId(), event.getArtAId(), event.getArtATypeId(), event.getArtBId(), - event.getArtBTypeId(), event.getRelTypeId()); - xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.ModifiedRationale, - unloadedRelation)); - } else if (event instanceof NetworkRelationLinkCreatedEvent) { - UnloadedRelation unloadedRelation = - new UnloadedRelation(branch.getId(), event.getArtAId(), event.getArtATypeId(), event.getArtBId(), - event.getArtBTypeId(), event.getRelTypeId()); - xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.Added, unloadedRelation)); - } - } - if (aArtifactLoaded || bArtifactLoaded) { - if (event instanceof NetworkRelationLinkDeletedEvent) { - RelationLink relation = - RelationManager.getLoadedRelationById(event.getRelId(), event.getArtAId(), event.getArtBId(), - branch, branch); - if (relation != null) { - relation.internalRemoteEventDelete(); - - xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.Deleted, relation, - relation.getBranch(), relation.getRelationType().getName())); - } - } else if (event instanceof NetworkRelationLinkCreatedEvent) { - RelationLink relation = - RelationManager.getLoadedRelationById(event.getRelId(), event.getArtAId(), event.getArtBId(), - branch, branch); - - if (relation == null || relation.getModificationType() == ModificationType.DELETED) { - relation = - RelationLink.getOrCreate(event.getArtAId(), event.getArtBId(), branch, branch, relationType, - event.getRelId(), event.getGammaId(), - ((NetworkRelationLinkCreatedEvent) event).getRationale(), ModificationType.NEW); - - xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.Added, relation, - relation.getBranch(), relation.getRelationType().getName())); - } - } - } - } catch (OseeCoreException ex) { - OseeEventManager.eventLog("Update Relations", ex); - } - } - } - - public static void internalHandleRemoteArtifactDeleted(Artifact artifact) throws OseeCoreException { - if (artifact == null) { - return; - } else { - artifact.internalSetDeletedFromRemoteEvent(); - } - } - -} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/Sender.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/Sender.java index 3446f73c420..68ab29a244d 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/Sender.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/Sender.java @@ -25,7 +25,7 @@ public class Sender { private final OseeClientSession oseeSession; public Sender(Object sourceObject, OseeClientSession oseeSession) { - this.sourceObject = InternalEventManager.getObjectSafeName(sourceObject); + this.sourceObject = EventUtil.getObjectSafeName(sourceObject); this.oseeSession = oseeSession; } @@ -41,7 +41,7 @@ public class Sender { } public Sender(Object sourceObject) throws OseeAuthenticationRequiredException { - this.sourceObject = InternalEventManager.getObjectSafeName(sourceObject); + this.sourceObject = EventUtil.getObjectSafeName(sourceObject); this.oseeSession = ClientSessionManager.getSession(); } @@ -81,7 +81,7 @@ public class Sender { * @param sender the sender to set */ public void setSourceObject(Object sourceObject) { - this.sourceObject = InternalEventManager.getObjectSafeName(sourceObject); + this.sourceObject = EventUtil.getObjectSafeName(sourceObject); } public NetworkSender getNetworkSender() { diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/ArtifactModifiedEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/ArtifactModifiedEvent.java index 5ddc3dd9a37..f093c28b046 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/ArtifactModifiedEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/ArtifactModifiedEvent.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.event.systems; import java.util.Collection; import java.util.Collections; @@ -20,6 +20,8 @@ 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.ArtifactModType; import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.event.ArtifactTransactionModifiedEvent; +import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact; import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType; import org.eclipse.osee.framework.ui.plugin.event.UnloadedArtifact; 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 new file mode 100644 index 00000000000..5a23d7e64ea --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/EventManagerData.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * 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.CopyOnWriteArrayList; +import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences; +import org.eclipse.osee.framework.skynet.core.event.IEventListener; + +/** + * @author Roberto E. Escobar + */ +public class EventManagerData { + + private final Collection<IEventListener> priorityListeners = new CopyOnWriteArrayList<IEventListener>(); + private final Collection<IEventListener> listeners = new CopyOnWriteArrayList<IEventListener>(); + private final EventSystemPreferences preferences = new EventSystemPreferences(); + + private LegacyEventManager legacyEventManager; + private InternalEventManager2 messageEventManager; + + public void setLegacyEventManager(LegacyEventManager legacyEventManager) { + this.legacyEventManager = legacyEventManager; + } + + public void setMessageEventManager(InternalEventManager2 messageEventManager) { + this.messageEventManager = messageEventManager; + } + + public Collection<IEventListener> getPriorityListeners() { + return priorityListeners; + } + + public Collection<IEventListener> getListeners() { + return listeners; + } + + public EventSystemPreferences getPreferences() { + return preferences; + } + + public LegacyEventManager getLegacyEventManager() { + return legacyEventManager; + } + + public InternalEventManager2 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 new file mode 100644 index 00000000000..3e0dc061050 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/EventManagerFactory.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * 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.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.OseeEventThreadFactory; +import org.eclipse.osee.framework.skynet.core.event.systems.InternalEventManager2.ConnectionStatus; + +/** + * @author Roberto E. Escobar + */ +public class EventManagerFactory { + + public LegacyEventManager createLegacyEventManager(EventSystemPreferences preferences, Collection<IEventListener> listeners, Collection<IEventListener> priorityListeners) { + LegacyRemoteEventReceiver clientEventListener = new LegacyRemoteEventReceiver(); + JiniSkynetEventServiceLookup serviceLookup = new JiniSkynetEventServiceLookup(preferences, clientEventListener); + ExecutorService executorService = createExecutor("Osee Events"); + LegacyEventManager manager = + new LegacyEventManager(listeners, priorityListeners, executorService, preferences, serviceLookup, + clientEventListener); + clientEventListener.setInternalEventManager(manager); + return manager; + } + + public InternalEventManager2 createNewEventManager(IOseeCoreModelEventService coreModelEventService, EventSystemPreferences preferences, Collection<IEventListener> listeners, Collection<IEventListener> priorityListeners, ConnectionStatus connectionStatus) { + ExecutorService executorService = createExecutor("Osee Events2"); + InternalEventManager2 eventManager = + new InternalEventManager2(coreModelEventService, listeners, priorityListeners, executorService, preferences, + connectionStatus); + return eventManager; + } + + private ExecutorService createExecutor(String threadPrefix) { + int numberOfProcessors = Runtime.getRuntime().availableProcessors(); + 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/RemoteEventManager2.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEvent2Listener.java index 0243cd45028..8a2d8d7172c 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager2.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkEventToRemoteEvent2Listener.java @@ -1,468 +1,354 @@ -/******************************************************************************* - * 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; - -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.ISchedulingRule; -import org.eclipse.core.runtime.jobs.Job; -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.jdk.core.util.GUID; -import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.messaging.ConnectionListener; -import org.eclipse.osee.framework.messaging.ConnectionNode; -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.ResEventManager; -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.artifact.PurgeTransactionOperation; -import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; -import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; -import org.eclipse.osee.framework.skynet.core.event2.BranchEvent; -import org.eclipse.osee.framework.skynet.core.event2.FrameworkEventUtil; -import org.eclipse.osee.framework.skynet.core.event2.TransactionEvent; -import org.eclipse.osee.framework.skynet.core.event2.TransactionEventType; -import org.eclipse.osee.framework.skynet.core.event2.artifact.AttributeChange; -import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact; -import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidRelation; -import org.eclipse.osee.framework.skynet.core.event2.artifact.EventChangeTypeBasicGuidArtifact; -import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType; -import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModifiedBasicGuidArtifact; -import org.eclipse.osee.framework.skynet.core.internal.Activator; -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; - -/** - * Manages remote events from the SkynetEventService. - * - * @author Donald G Dunne - */ -public class RemoteEventManager2 implements IFrameworkEventListener { - private static final RemoteEventManager2 instance = new RemoteEventManager2(); - private static ResConnectionListener connectionListener; - - private RemoteEventManager2() { - super(); - connectionListener = new ResConnectionListener(); - ResEventManager.getInstance().setConnectionListener(connectionListener); - } - - public static RemoteEventManager2 getInstance() { - return instance; - } - - private static class ResConnectionListener implements ConnectionListener { - - private boolean isConnected = false; - - @Override - public void connected(ConnectionNode node) { - isConnected = System.getProperty("osee.default.broker.uri") != null; - try { - OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem2_Connected); - OseeLog.log(Activator.class, Level.INFO, "RES2 Connected"); - } catch (OseeCoreException ex) { - OseeEventManager.eventLog("REM2: ResConnectionListener", ex); - } - } - - public boolean isConnected() { - return isConnected; - } - - @Override - public void notConnected(ConnectionNode node) { - isConnected = false; - try { - OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem2_DisConnected); - OseeLog.log(Activator.class, Level.INFO, "RES2 Dis-Connected"); - } catch (OseeCoreException ex) { - OseeEventManager.eventLog("REM2: ResConnectionListener", ex); - } - } - } - private static final ISchedulingRule mutexRule = new ISchedulingRule() { - - @Override - public boolean contains(ISchedulingRule rule) { - return rule == this; - } - - @Override - public boolean isConflicting(ISchedulingRule rule) { - return rule == this; - } - }; - - @Override - public void onEvent(final RemoteEvent remoteEvent) { - final Runnable runnable = new Runnable() { - - @Override - public void run() { - 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); - updateRelations(sender, transEvent); - InternalEventManager2.kickArtifactEvent(sender, transEvent); - } catch (Exception ex) { - OseeEventManager.eventLog("REM2: RemoteTransactionEvent1", ex); - } - } else if (remoteEvent instanceof RemoteBranchEvent1) { - try { - BranchEvent branchEvent = FrameworkEventUtil.getBranchEvent((RemoteBranchEvent1) remoteEvent); - updateBranches(sender, branchEvent); - InternalEventManager2.kickBranchEvent(sender, branchEvent); - } catch (Exception ex) { - OseeEventManager.eventLog("REM2: RemoteBranchEvent1", ex); - } - } else if (remoteEvent instanceof RemoteTransactionEvent1) { - try { - TransactionEvent transEvent = - FrameworkEventUtil.getTransactionEvent((RemoteTransactionEvent1) remoteEvent); - handleTransactionEvent(sender, transEvent); - } catch (Exception ex) { - OseeEventManager.eventLog("REM2: RemoteBranchEvent1", ex); - } - } - } - }; - - if (InternalEventManager2.isPendRunning()) { - runnable.run(); - } else { - Job job = - new Job(String.format("[%s] - receiving [%s]", getClass().getSimpleName(), - remoteEvent.getClass().getSimpleName())) { - - @Override - protected IStatus run(IProgressMonitor monitor) { - - try { - runnable.run(); - } catch (Exception ex) { - // don't want exceptions poping up; just log and return nicely - OseeLog.log(Activator.class, Level.SEVERE, "REM2 Receive Event Exception", ex); - } - monitor.done(); - return Status.OK_STATUS; - } - }; - job.setSystem(true); - job.setRule(mutexRule); - job.setUser(false); - job.schedule(); - } - } - - private void handleTransactionEvent(Sender sender, TransactionEvent transEvent) { - try { - if (transEvent.getEventType() == TransactionEventType.Purged) { - PurgeTransactionOperation.handleRemotePurgeTransactionEvent(transEvent); - InternalEventManager2.kickTransactionEvent(sender, transEvent); - } else { - OseeEventManager.eventLog("REM2: handleTransactionEvent - unhandled mod type " + transEvent.getEventType()); - } - } catch (Exception ex) { - OseeEventManager.eventLog("REM2: handleTransactionEvent", ex); - } - } - - /** - * Updates local cache - */ - private static void updateBranches(Sender sender, BranchEvent branchEvent) { - BranchEventType eventType = branchEvent.getEventType(); - try { - if (eventType == BranchEventType.Committed) { - TransactionManager.clearCommitArtifactCacheForAssociatedArtifact(BranchManager.getAssociatedArtifact(BranchManager.getBranchByGuid(branchEvent.getBranchGuid()))); - } - BranchManager.refreshBranches(); - } catch (Exception ex) { - OseeEventManager.eventLog("REM2: updateBranches", ex); - } - } - - /** - * Updates local cache - **/ - private static void updateArtifacts(Sender sender, ArtifactEvent transEvent) { - // Don't crash on any one artifact update problem (no update method throughs exceptions) - for (EventBasicGuidArtifact guidArt : transEvent.getArtifacts()) { - OseeEventManager.eventLog(String.format("REM2: 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); - } - // Handle Change Type Artifacts - else if (guidArt.getModType() == EventModType.ChangeType) { - ChangeArtifactType.handleRemoteChangeType((EventChangeTypeBasicGuidArtifact) guidArt); - } - // Unknown mod type - else { - OseeEventManager.eventLog(String.format("REM2: updateArtifacts - Unhandled mod type [%s]", - guidArt.getModType())); - } - } - } - - private static void updateRelations(Sender sender, ArtifactEvent transEvent) { - for (EventBasicGuidRelation guidArt : transEvent.getRelations()) { - // Don't crash on any one relation update problem - try { - OseeEventManager.eventLog(String.format("REM2: 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 - if (aArtifact == null && bArtifact == null) { - return; - } - 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, branch); - - if (relation == null || relation.getModificationType() == ModificationType.DELETED || relation.getModificationType() == ModificationType.ARTIFACT_DELETED) { - relation = - RelationLink.getOrCreate(guidArt.getArtAId(), guidArt.getArtBId(), branch, 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, branch); - if (relation != null) { - relation.internalRemoteEventDelete(); - } - } else if (eventType == RelationEventType.ModifiedRationale) { - RelationLink relation = - RelationManager.getLoadedRelationById(guidArt.getRelationId(), guidArt.getArtAId(), - guidArt.getArtBId(), branch, 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, branch); - if (relation != null) { - relation.undelete(); - relation.setNotDirty(); - } - } else { - OseeEventManager.eventLog(String.format("REM2: updateRelations - Unhandled mod type [%s]", eventType)); - } - } - } catch (OseeCoreException ex) { - OseeEventManager.eventLog("REM2: updateRelations", ex); - } - } - } - - private static 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()) { - RemoteEventManager.internalHandleRemoteArtifactDeleted(artifact); - } - } catch (OseeCoreException ex) { - OseeEventManager.eventLog("REM2: updateDeletedArtifact", ex); - } - } - - private static void updateModifiedArtifact(EventModifiedBasicGuidArtifact 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()) { - for (AttributeChange attrChange : guidArt.getAttributeChanges()) { - if (!InternalEventManager.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()) { - OseeEventManager.eventLog(String.format("%s's attribute %d [/n%s/n] has been overwritten.", - artifact.getSafeName(), attribute.getId(), attribute.toString())); - } - try { - if (modificationType == null) { - OseeEventManager.eventLog(String.format( - "REM2: 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) { - OseeEventManager.eventLog( - String.format("REM2: 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) { - OseeEventManager.eventLog(String.format("REM2: 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) { - OseeEventManager.eventLog(String.format( - "REM2: Exception updating %s's attribute change for attributeTypeId %d.", - artifact.getSafeName(), attributeType.getId()), ex); - } - } - } - } - } catch (OseeCoreException ex) { - OseeEventManager.eventLog("REM2: updateModifiedArtifact", ex); - } - } - - public void deregisterForRemoteEvents() throws OseeCoreException { - ResEventManager.getInstance().stop(); - OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem2_DisConnected); - } - - public void registerForRemoteEvents() throws OseeCoreException { - if (OseeEventManager.isNewEvents()) { - ResEventManager.getInstance().start(this); - OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem2_Connected); - OseeLog.log(Activator.class, Level.INFO, "REM2: Enabled"); - } else { - OseeLog.log(Activator.class, Level.INFO, "REM2: Disabled"); - } - } - - public static boolean isConnected() { - return OseeEventManager.isNewEvents() && connectionListener.isConnected(); - } - - public String getConnectionProperties() { - StringBuilder sb = new StringBuilder(); - sb.append("osee.default.broker.uri [" + System.getProperty("osee.default.broker.uri") + "]"); - sb.append("eventDebug [" + System.getProperty("eventDebug") + "]"); - sb.append("eventSystem [" + System.getProperty("eventSystem") + "]"); - return sb.toString(); - } - - /** - * 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. - */ - public void kick(final RemoteEvent remoteEvent) { - if (OseeEventManager.isNewEvents() && isConnected()) { - OseeEventManager.eventLog(String.format("REM2: kick - [%s]", remoteEvent)); - Job job = - new Job(String.format("[%s] - sending [%s]", getClass().getSimpleName(), - remoteEvent.getClass().getSimpleName())) { - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - ResEventManager.getInstance().kick(remoteEvent); - } catch (Exception ex) { - OseeEventManager.eventLog("REM2: kick", ex); - return new Status(IStatus.ERROR, Activator.PLUGIN_ID, -1, ex.getLocalizedMessage(), ex); - } - return Status.OK_STATUS; - } - }; - - job.schedule(); - } - - if (InternalEventManager2.isEnableRemoteEventLoopback()) { - OseeEventManager.eventLog("REM2: Loopback enabled - Returning events as Remote event."); - String newSessionId = GUID.create(); - remoteEvent.getNetworkSender().setSessionId(newSessionId); - instance.onEvent(remoteEvent); - } - } - - public String getConnectionInfo() { - if (!OseeEventManager.isNewEvents()) { - return "New Events == OFF"; - } - if (connectionListener == null || !connectionListener.isConnected()) { - return "ActiveMQ JMS Service is down"; - } - return "Connected"; - } - -} +/*******************************************************************************
+ * 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.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.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
+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.logging.OseeLog;
+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.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.artifact.PurgeTransactionOperation;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+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.Sender;
+import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent;
+import org.eclipse.osee.framework.skynet.core.event2.BranchEvent;
+import org.eclipse.osee.framework.skynet.core.event2.FrameworkEventUtil;
+import org.eclipse.osee.framework.skynet.core.event2.TransactionEvent;
+import org.eclipse.osee.framework.skynet.core.event2.TransactionEventType;
+import org.eclipse.osee.framework.skynet.core.event2.artifact.AttributeChange;
+import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact;
+import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidRelation;
+import org.eclipse.osee.framework.skynet.core.event2.artifact.EventChangeTypeBasicGuidArtifact;
+import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType;
+import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModifiedBasicGuidArtifact;
+import org.eclipse.osee.framework.skynet.core.internal.Activator;
+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 FrameworkEventToRemoteEvent2Listener implements IFrameworkEventListener {
+
+ private final ISchedulingRule mutexRule;
+ private InternalEventManager2 eventManager;
+
+ public FrameworkEventToRemoteEvent2Listener(InternalEventManager2 eventManager) {
+ this.eventManager = eventManager;
+ this.mutexRule = new ISchedulingRule() {
+
+ @Override
+ public boolean contains(ISchedulingRule rule) {
+ return rule == this;
+ }
+
+ @Override
+ public boolean isConflicting(ISchedulingRule rule) {
+ return rule == this;
+ }
+ };
+ }
+
+ @Override
+ public void onEvent(final RemoteEvent remoteEvent) {
+ final Runnable runnable = new Runnable() {
+ private void handleTransactionEvent(Sender sender, TransactionEvent transEvent) {
+ try {
+ if (transEvent.getEventType() == TransactionEventType.Purged) {
+ PurgeTransactionOperation.handleRemotePurgeTransactionEvent(transEvent);
+ eventManager.kickTransactionEvent(sender, transEvent);
+ } else {
+ EventUtil.eventLog("REM2: handleTransactionEvent - unhandled mod type " + transEvent.getEventType());
+ }
+ } catch (Exception ex) {
+ EventUtil.eventLog("REM2: handleTransactionEvent", ex);
+ }
+ }
+
+ @Override
+ public void run() {
+ 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);
+ updateRelations(sender, transEvent);
+ eventManager.kickArtifactEvent(sender, transEvent);
+ } catch (Exception ex) {
+ EventUtil.eventLog("REM2: 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("REM2: RemoteBranchEvent1", ex);
+ }
+ } else if (remoteEvent instanceof RemoteTransactionEvent1) {
+ try {
+ TransactionEvent transEvent =
+ FrameworkEventUtil.getTransactionEvent((RemoteTransactionEvent1) remoteEvent);
+ handleTransactionEvent(sender, transEvent);
+ } catch (Exception ex) {
+ EventUtil.eventLog("REM2: RemoteBranchEvent1", ex);
+ }
+ }
+ }
+ };
+
+ if (OseeEventManager.getPreferences().isPendRunning()) {
+ runnable.run();
+ } else {
+ Job job =
+ new Job(String.format("[%s] - receiving [%s]", getClass().getSimpleName(),
+ remoteEvent.getClass().getSimpleName())) {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+
+ try {
+ runnable.run();
+ } catch (Exception ex) {
+ // don't want exceptions poping up; just log and return nicely
+ OseeLog.log(Activator.class, Level.SEVERE, "REM2 Receive Event Exception", ex);
+ }
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+ };
+ job.setSystem(true);
+ job.setRule(mutexRule);
+ job.setUser(false);
+ job.schedule();
+ }
+ }
+
+ /**
+ * Updates local cache
+ **/
+ private void updateArtifacts(Sender sender, ArtifactEvent transEvent) {
+ // Don't crash on any one artifact update problem (no update method throughs exceptions)
+ for (EventBasicGuidArtifact guidArt : transEvent.getArtifacts()) {
+ EventUtil.eventLog(String.format("REM2: 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);
+ }
+ // Handle Change Type Artifacts
+ else if (guidArt.getModType() == EventModType.ChangeType) {
+ ChangeArtifactType.handleRemoteChangeType((EventChangeTypeBasicGuidArtifact) guidArt);
+ }
+ // Unknown mod type
+ else {
+ EventUtil.eventLog(String.format("REM2: updateArtifacts - Unhandled mod type [%s]", guidArt.getModType()));
+ }
+ }
+ }
+
+ /**
+ * Updates local cache
+ */
+ private void updateBranches(Sender sender, BranchEvent branchEvent) {
+ BranchEventType eventType = branchEvent.getEventType();
+ try {
+ if (eventType == BranchEventType.Committed) {
+ TransactionManager.clearCommitArtifactCacheForAssociatedArtifact(BranchManager.getAssociatedArtifact(BranchManager.getBranchByGuid(branchEvent.getBranchGuid())));
+ }
+ BranchManager.refreshBranches();
+ } catch (Exception ex) {
+ EventUtil.eventLog("REM2: 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("REM2: 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
+ if (aArtifact == null && bArtifact == null) {
+ return;
+ }
+ 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, branch);
+
+ if (relation == null || relation.getModificationType() == ModificationType.DELETED || relation.getModificationType() == ModificationType.ARTIFACT_DELETED) {
+ relation =
+ RelationLink.getOrCreate(guidArt.getArtAId(), guidArt.getArtBId(), branch, 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, branch);
+ if (relation != null) {
+ relation.internalRemoteEventDelete();
+ }
+ } else if (eventType == RelationEventType.ModifiedRationale) {
+ RelationLink relation =
+ RelationManager.getLoadedRelationById(guidArt.getRelationId(), guidArt.getArtAId(),
+ guidArt.getArtBId(), branch, 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, branch);
+ if (relation != null) {
+ relation.undelete();
+ relation.setNotDirty();
+ }
+ } else {
+ EventUtil.eventLog(String.format("REM2: updateRelations - Unhandled mod type [%s]", eventType));
+ }
+ }
+ } catch (OseeCoreException ex) {
+ EventUtil.eventLog("REM2: 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("REM2: updateDeletedArtifact", ex);
+ }
+ }
+
+ private void updateModifiedArtifact(EventModifiedBasicGuidArtifact 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()) {
+ 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(
+ "REM2: 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("REM2: 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("REM2: 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(
+ "REM2: Exception updating %s's attribute change for attributeTypeId %d.",
+ artifact.getSafeName(), attributeType.getId()), ex);
+ }
+ }
+ }
+ }
+ } catch (OseeCoreException ex) {
+ EventUtil.eventLog("REM2: 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/FrameworkTransationDataCompacter.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkTransationDataCompacter.java new file mode 100644 index 00000000000..385ac65c18c --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/FrameworkTransationDataCompacter.java @@ -0,0 +1,184 @@ +/******************************************************************************* + * 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.logging.Level; +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.artifact.ArtifactModType; +import org.eclipse.osee.framework.skynet.core.event.ArtifactTransactionModifiedEvent; +import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData; +import org.eclipse.osee.framework.skynet.core.event.LoadedRelation; +import org.eclipse.osee.framework.skynet.core.internal.Activator; +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.RelationTypeManager; +import org.eclipse.osee.framework.ui.plugin.event.UnloadedRelation; + +/** + * @author Donald G. Dunne + */ +public class FrameworkTransationDataCompacter { + + public static void compact(FrameworkTransactionData data) { + // Roll-up change information + + for (ArtifactTransactionModifiedEvent xModifiedEvent : data.getXModifiedEvents()) { + if (xModifiedEvent instanceof ArtifactModifiedEvent) { + ArtifactModifiedEvent xArtifactModifiedEvent = (ArtifactModifiedEvent) xModifiedEvent; + if (xArtifactModifiedEvent.artifactModType == ArtifactModType.Added) { + if (xArtifactModifiedEvent.artifact != null) { + data.cacheAddedArtifacts.add(xArtifactModifiedEvent.artifact); + if (data.branchId == -1) { + data.branchId = xArtifactModifiedEvent.artifact.getBranch().getId(); + } + } else { + data.unloadedAddedArtifacts.add(xArtifactModifiedEvent.unloadedArtifact); + if (data.branchId == -1) { + data.branchId = xArtifactModifiedEvent.unloadedArtifact.getBranchId(); + } + } + } + if (xArtifactModifiedEvent.artifactModType == ArtifactModType.Deleted) { + if (xArtifactModifiedEvent.artifact != null) { + data.cacheDeletedArtifacts.add(xArtifactModifiedEvent.artifact); + if (data.branchId == -1) { + data.branchId = xArtifactModifiedEvent.artifact.getBranch().getId(); + } + } else { + data.unloadedDeletedArtifacts.add(xArtifactModifiedEvent.unloadedArtifact); + if (data.branchId == -1) { + data.branchId = xArtifactModifiedEvent.unloadedArtifact.getBranchId(); + } + } + } + if (xArtifactModifiedEvent.artifactModType == ArtifactModType.Changed) { + if (xArtifactModifiedEvent.artifact != null) { + data.cacheChangedArtifacts.add(xArtifactModifiedEvent.artifact); + if (data.branchId == -1) { + data.branchId = xArtifactModifiedEvent.artifact.getBranch().getId(); + } + } else { + data.unloadedChangedArtifacts.add(xArtifactModifiedEvent.unloadedArtifact); + if (data.branchId == -1) { + data.branchId = xArtifactModifiedEvent.unloadedArtifact.getBranchId(); + } + } + } + } + if (xModifiedEvent instanceof RelationModifiedEvent) { + RelationModifiedEvent xRelationModifiedEvent = (RelationModifiedEvent) xModifiedEvent; + UnloadedRelation unloadedRelation = xRelationModifiedEvent.unloadedRelation; + LoadedRelation loadedRelation = null; + // If link is loaded, get information from link + if (xRelationModifiedEvent.link != null) { + RelationLink link = xRelationModifiedEvent.link; + // Get artifact A/B if loaded in artifact cache + Artifact artA = ArtifactCache.getActive(link.getAArtifactId(), link.getABranch()); + Artifact artB = ArtifactCache.getActive(link.getBArtifactId(), link.getBBranch()); + try { + loadedRelation = + new LoadedRelation(artA, artB, xRelationModifiedEvent.link.getRelationType(), + xRelationModifiedEvent.branch, unloadedRelation); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } + // Else, get information from unloadedRelation (if != null) + else if (unloadedRelation != null) { + Artifact artA = ArtifactCache.getActive(unloadedRelation.getArtifactAId(), unloadedRelation.getId()); + Artifact artB = ArtifactCache.getActive(unloadedRelation.getArtifactBId(), unloadedRelation.getId()); + if (artA != null || artB != null) { + try { + loadedRelation = + new LoadedRelation(artA, artB, RelationTypeManager.getType(unloadedRelation.getTypeId()), + artA != null ? artA.getBranch() : artB.getBranch(), unloadedRelation); + } catch (OseeCoreException ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } + } + if (xRelationModifiedEvent.relationEventType == RelationEventType.Added) { + if (loadedRelation != null) { + data.cacheAddedRelations.add(loadedRelation); + if (loadedRelation.getArtifactA() != null) { + data.cacheRelationAddedArtifacts.add(loadedRelation.getArtifactA()); + if (data.branchId == -1) { + data.branchId = loadedRelation.getArtifactA().getBranch().getId(); + } + } + if (loadedRelation.getArtifactB() != null) { + data.cacheRelationAddedArtifacts.add(loadedRelation.getArtifactB()); + if (data.branchId == -1) { + data.branchId = loadedRelation.getArtifactB().getBranch().getId(); + } + } + } + if (unloadedRelation != null) { + data.unloadedAddedRelations.add(unloadedRelation); + } + } + if (xRelationModifiedEvent.relationEventType == RelationEventType.Deleted) { + if (loadedRelation != null) { + data.cacheDeletedRelations.add(loadedRelation); + if (loadedRelation.getArtifactA() != null) { + data.cacheRelationDeletedArtifacts.add(loadedRelation.getArtifactA()); + if (data.branchId == -1) { + data.branchId = loadedRelation.getArtifactA().getBranch().getId(); + loadedRelation.getBranch(); + } + } + if (loadedRelation.getArtifactB() != null) { + data.cacheRelationDeletedArtifacts.add(loadedRelation.getArtifactB()); + if (data.branchId == -1) { + data.branchId = loadedRelation.getArtifactB().getBranch().getId(); + } + } + } + if (unloadedRelation != null) { + data.unloadedDeletedRelations.add(unloadedRelation); + if (data.branchId == -1) { + data.branchId = unloadedRelation.getId(); + } + } + } + if (xRelationModifiedEvent.relationEventType == RelationEventType.ModifiedRationale) { + if (loadedRelation != null) { + data.cacheChangedRelations.add(loadedRelation); + if (loadedRelation.getArtifactA() != null) { + data.cacheRelationChangedArtifacts.add(loadedRelation.getArtifactA()); + if (data.branchId == -1) { + data.branchId = loadedRelation.getArtifactA().getBranch().getId(); + } + } + if (loadedRelation.getArtifactB() != null) { + data.cacheRelationChangedArtifacts.add(loadedRelation.getArtifactB()); + if (data.branchId == -1) { + data.branchId = loadedRelation.getArtifactB().getBranch().getId(); + } + } + } + if (unloadedRelation != null) { + data.unloadedChangedRelations.add(unloadedRelation); + if (data.branchId == -1) { + data.branchId = unloadedRelation.getId(); + } + } + } + } + } + // Clean out known duplicates + data.cacheChangedArtifacts.removeAll(data.cacheDeletedArtifacts); + data.cacheAddedArtifacts.removeAll(data.cacheDeletedArtifacts); + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/InternalEventManager2.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/InternalEventManager2.java index 51ba42785b8..fa6afe363cf 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/InternalEventManager2.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/InternalEventManager2.java @@ -8,19 +8,32 @@ * Contributors: * Boeing - initial API and implementation *******************************************************************************/ -package org.eclipse.osee.framework.skynet.core.event; +package org.eclipse.osee.framework.skynet.core.event.systems; -import java.util.ArrayList; -import java.util.Arrays; +import java.rmi.RemoteException; import java.util.Collection; -import java.util.Collections; -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.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.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.BranchEventType; +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.IAccessControlEventListener; +import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener; +import org.eclipse.osee.framework.skynet.core.event.IBroadcastEventListener; +import org.eclipse.osee.framework.skynet.core.event.IEventFilteredListener; +import org.eclipse.osee.framework.skynet.core.event.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.IRemoteEventManagerEventListener; +import org.eclipse.osee.framework.skynet.core.event.RemoteEventServiceEventType; +import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.AccessControlEvent; import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event2.BranchEvent; @@ -33,97 +46,67 @@ import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidRela import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener; import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter; import org.eclipse.osee.framework.skynet.core.internal.Activator; -import org.eclipse.osee.framework.ui.plugin.event.UnloadedArtifact; /** - * Internal implementation of OSEE Event Manager that should only be accessed from RemoteEventManager and - * OseeEventManager classes. + * Internal implementation of OSEE Event Manager that should only be accessed from OseeEventManager classes. * * @author Donald G. Dunne */ public class InternalEventManager2 { - - public static final Collection<UnloadedArtifact> EMPTY_UNLOADED_ARTIFACTS = Collections.emptyList(); - private static boolean disableEvents = false; - private static final ThreadFactory threadFactory = new OseeEventThreadFactory("Osee Events2"); - private static final ExecutorService executorService = Executors.newFixedThreadPool( - Runtime.getRuntime().availableProcessors(), threadFactory); - private static final List<IEventListener> priorityListeners = new CopyOnWriteArrayList<IEventListener>(); - private static final List<IEventListener> listeners = new CopyOnWriteArrayList<IEventListener>(); - private static boolean pendRunning = false; - - // This will disable all Local TransactionEvents and enable loopback routing of Remote TransactionEvents back - // through the RemoteEventService as if they came from another client. This is for testing purposes only and - // should be reset to false before release. - private static boolean enableRemoteEventLoopback = false; - - private static void execute(Runnable runnable) { - if (pendRunning) { - runnable.run(); - } else { - executorService.submit(runnable); - } + public static interface ConnectionStatus { + boolean isConnected(); } - public static void addListener(IEventListener listener) { - if (listener == null) { - throw new IllegalArgumentException("listener can not be null"); - } - if (!listeners.contains(listener)) { - listeners.add(listener); - OseeEventManager.eventLog("IEM2: addListener (" + priorityListeners.size() + ") " + listener); - } - } - - /** - * Add a priority listener. This should only be done for caches where they need to be updated before all other - * listeners are called. - */ - public static void addPriorityListener(IEventListener listener) { - if (listener == null) { - throw new IllegalArgumentException("listener can not be null"); - } - if (!priorityListeners.contains(listener)) { - priorityListeners.add(listener); - } - OseeEventManager.eventLog("IEM2: addPriorityListener (" + priorityListeners.size() + ") " + listener); + 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 InternalEventManager2(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 FrameworkEventToRemoteEvent2Listener(this); + this.connectionStatus = connectionStatus; } - public static void removeListener(IEventListener listener) { - listeners.remove(listener); - priorityListeners.remove(listener); + public void start() { + coreModelEventService.addFrameworkListener(frameworkListener); } - public static void removeListeners(IEventListener listener) { - OseeEventManager.eventLog("IEM2: removeListener: (" + listeners.size() + ") " + listener); - listeners.remove(listener); - priorityListeners.remove(listener); + public void stop() { + coreModelEventService.removeFrameworkListener(frameworkListener); } - /** - * Clear all registered listeners. Should be used for testing purposes only. - */ - public static void internalRemoveAllListeners() { - listeners.clear(); - priorityListeners.clear(); + public boolean isConnected() { + return preferences.isNewEvents() && connectionStatus.isConnected(); } - public static int getNumberOfListeners() { - return listeners.size(); + private void execute(Runnable runnable) { + if (preferences.isPendRunning()) { + runnable.run(); + } else { + executorService.submit(runnable); + } } /** * For all IBranchEventListener, process priorityListeners, then normal listeners */ - public static void processBranchEvent(Sender sender, BranchEvent branchEvent) { - OseeEventManager.eventLog(String.format("IEM2: processBranchEvent [%s]", branchEvent)); + public void processBranchEvent(Sender sender, BranchEvent branchEvent) { + EventUtil.eventLog(String.format("IEM2: processBranchEvent [%s]", branchEvent)); for (IEventListener listener : priorityListeners) { try { if (listener instanceof IBranchEventListener) { processBranchEventListener((IBranchEventListener) listener, sender, branchEvent); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processBranchEvent [%s] error processing priorityListeners", branchEvent), ex); } } @@ -133,13 +116,13 @@ public class InternalEventManager2 { processBranchEventListener((IBranchEventListener) listener, sender, branchEvent); } } catch (Exception ex) { - OseeEventManager.eventLog( - String.format("IEM2: processBranchEvent [%s] error processing listeners", branchEvent), ex); + EventUtil.eventLog(String.format("IEM2: processBranchEvent [%s] error processing listeners", branchEvent), + ex); } } } - private static void processBranchEventListener(IBranchEventListener listener, Sender sender, BranchEvent branchEvent) { + 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()) { @@ -156,14 +139,14 @@ public class InternalEventManager2 { /** * For all IBranchEventListener, process priorityListeners, then normal listeners */ - public static void processEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) { + public void processEventArtifactsAndRelations(Sender sender, ArtifactEvent artifactEvent) { for (IEventListener listener : priorityListeners) { try { if (listener instanceof IArtifactEventListener) { processEventArtifactsAndRelationsListener((IArtifactEventListener) listener, artifactEvent, sender); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processArtsAndRels [%s] error processing priorityListeners", artifactEvent), ex); } } @@ -173,14 +156,14 @@ public class InternalEventManager2 { processEventArtifactsAndRelationsListener((IArtifactEventListener) listener, artifactEvent, sender); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processArtsAndRels [%s] error processing listeners", artifactEvent), ex); } } } - private static void processEventArtifactsAndRelationsListener(IArtifactEventListener listener, ArtifactEvent artifactEvent, Sender sender) { - OseeEventManager.eventLog(String.format("IEM2: processArtsAndRels [%s]", artifactEvent)); + private void processEventArtifactsAndRelationsListener(IArtifactEventListener listener, ArtifactEvent artifactEvent, Sender sender) { + EventUtil.eventLog(String.format("IEM2: processArtsAndRels [%s]", artifactEvent)); // If any filter doesn't match, don't call listener if (((IEventFilteredListener) listener).getEventFilters() != null) { for (IEventFilter eventFilter : ((IEventFilteredListener) listener).getEventFilters()) { @@ -204,16 +187,16 @@ public class InternalEventManager2 { listener.handleArtifactEvent(artifactEvent, sender); } - public static void processAccessControlEvent(Sender sender, AccessControlEvent accessControlEvent) { - OseeEventManager.eventLog(String.format("IEM2: processAccessControlEvent [%s]", accessControlEvent)); + public void processAccessControlEvent(Sender sender, AccessControlEvent accessControlEvent) { + EventUtil.eventLog(String.format("IEM2: processAccessControlEvent [%s]", accessControlEvent)); for (IEventListener listener : priorityListeners) { try { if (listener instanceof IAccessControlEventListener) { ((IAccessControlEventListener) listener).handleAccessControlArtifactsEvent(sender, accessControlEvent); } } catch (Exception ex) { - OseeEventManager.eventLog(String.format( - "IEM2: processAccessControlEvent [%s] error processing priorityListeners", accessControlEvent), ex); + EventUtil.eventLog(String.format("IEM2: processAccessControlEvent [%s] error processing priorityListeners", + accessControlEvent), ex); } } for (IEventListener listener : listeners) { @@ -222,14 +205,14 @@ public class InternalEventManager2 { ((IAccessControlEventListener) listener).handleAccessControlArtifactsEvent(sender, accessControlEvent); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processAccessControlEvent [%s] error processing listeners", accessControlEvent), ex); } } } - public static void processEventBroadcastEvent(Sender sender, BroadcastEvent broadcastEvent) { - OseeEventManager.eventLog(String.format("IEM2: processEventBroadcastEvent [%s]", broadcastEvent)); + public void processEventBroadcastEvent(Sender sender, BroadcastEvent broadcastEvent) { + EventUtil.eventLog(String.format("IEM2: processEventBroadcastEvent [%s]", broadcastEvent)); if (broadcastEvent.getUsers().size() == 0) { return; } @@ -239,7 +222,7 @@ public class InternalEventManager2 { ((IBroadcastEventListener) listener).handleBroadcastEvent(sender, broadcastEvent); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processEventBroadcastEvent [%s] error processing priorityListeners", broadcastEvent), ex); } @@ -250,14 +233,14 @@ public class InternalEventManager2 { ((IBroadcastEventListener) listener).handleBroadcastEvent(sender, broadcastEvent); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processEventBroadcastEvent [%s] error processing listeners", broadcastEvent), ex); } } } - public static void processRemoteEventManagerEvent(Sender sender, RemoteEventServiceEventType remoteEventServiceEvent) { - OseeEventManager.eventLog(String.format("IEM2: processRemoteEventManagerEvent [%s]", remoteEventServiceEvent)); + public void processRemoteEventManagerEvent(Sender sender, RemoteEventServiceEventType remoteEventServiceEvent) { + EventUtil.eventLog(String.format("IEM2: processRemoteEventManagerEvent [%s]", remoteEventServiceEvent)); for (IEventListener listener : priorityListeners) { try { if (listener instanceof IRemoteEventManagerEventListener) { @@ -265,7 +248,7 @@ public class InternalEventManager2 { remoteEventServiceEvent); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processRemoteEventManagerEvent [%s] error processing priorityListeners", remoteEventServiceEvent), ex); } @@ -277,21 +260,21 @@ public class InternalEventManager2 { remoteEventServiceEvent); } } catch (Exception ex) { - OseeEventManager.eventLog(String.format( - "IEM2: processRemoteEventManagerEvent [%s] error processing listeners", remoteEventServiceEvent), ex); + EventUtil.eventLog(String.format("IEM2: processRemoteEventManagerEvent [%s] error processing listeners", + remoteEventServiceEvent), ex); } } } - public static void processTransactionEvent(Sender sender, TransactionEvent transactionEvent) { - OseeEventManager.eventLog(String.format("IEM2: processTransactionEvent [%s]", transactionEvent)); + public void processTransactionEvent(Sender sender, TransactionEvent transactionEvent) { + EventUtil.eventLog(String.format("IEM2: processTransactionEvent [%s]", transactionEvent)); for (IEventListener listener : priorityListeners) { try { if (listener instanceof ITransactionEventListener) { ((ITransactionEventListener) listener).handleTransactionEvent(sender, transactionEvent); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processTransactionEvent [%s] error processing priorityListeners", transactionEvent), ex); } @@ -302,64 +285,47 @@ public class InternalEventManager2 { ((ITransactionEventListener) listener).handleTransactionEvent(sender, transactionEvent); } } catch (Exception ex) { - OseeEventManager.eventLog( + EventUtil.eventLog( String.format("IEM2: processTransactionEvent [%s] error processing listeners", transactionEvent), ex); } } } - public static String getListenerReport() { - List<String> listenerStrs = new ArrayList<String>(); - for (IEventListener listener : priorityListeners) { - listenerStrs.add("Priority: " + getObjectSafeName(listener)); - } - for (IEventListener listener : listeners) { - listenerStrs.add(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 String getObjectSafeName(Object object) { - try { - return object.toString(); - } catch (Exception ex) { - return object.getClass().getSimpleName() + " - exception on toString: " + ex.getLocalizedMessage(); - } - } + // public String getListenerReport() { + // return EventUtil.getListenerReport(listeners, priorityListeners); + // } /* * Kick LOCAL and REMOTE access control events */ - static void kickAccessControlArtifactsEvent(final Sender sender, final AccessControlEvent accessControlEvent) { + 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 (isDisableEvents()) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM2: kickAccessControlEvent - type: " + accessControlEvent + sender + " artifacts: " + accessControlEvent.getArtifacts()); + EventUtil.eventLog("IEM2: kickAccessControlEvent - type: " + accessControlEvent + sender + " artifacts: " + accessControlEvent.getArtifacts()); Runnable runnable = new Runnable() { @Override public void run() { try { // Kick LOCAL - boolean normalOperation = !enableRemoteEventLoopback; - boolean loopbackTestEnabledAndRemoteEventReturned = enableRemoteEventLoopback && sender.isRemote(); + boolean normalOperation = !preferences.isEnableRemoteEventLoopback(); + boolean loopbackTestEnabledAndRemoteEventReturned = + preferences.isEnableRemoteEventLoopback() && sender.isRemote(); if (normalOperation && sender.isLocal() || loopbackTestEnabledAndRemoteEventReturned) { processAccessControlEvent(sender, accessControlEvent); } // Kick REMOTE if (sender.isLocal() && accessControlEvent.getEventType().isRemoteEventType()) { - RemoteEventManager2.getInstance().kick( - FrameworkEventUtil.getRemoteAccessControlEvent(accessControlEvent)); + sendRemoteEvent(FrameworkEventUtil.getRemoteAccessControlEvent(accessControlEvent)); } } catch (Exception ex) { - OseeEventManager.eventLog("IEM2 kickAccessControlEvent", ex); + EventUtil.eventLog("IEM2 kickAccessControlEvent", ex); } } }; @@ -367,11 +333,11 @@ public class InternalEventManager2 { } // Kick LOCAL "remote event manager" event - static void kickLocalRemEvent(final Sender sender, final RemoteEventServiceEventType remoteEventServiceEventType) { - if (isDisableEvents()) { + public void kickLocalRemEvent(final Sender sender, final RemoteEventServiceEventType remoteEventServiceEventType) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM2: kickLocalRemEvent: type: " + remoteEventServiceEventType + " - " + sender); + EventUtil.eventLog("IEM2: kickLocalRemEvent: type: " + remoteEventServiceEventType + " - " + sender); Runnable runnable = new Runnable() { @Override public void run() { @@ -389,25 +355,26 @@ public class InternalEventManager2 { } // Kick LOCAL ArtifactReloadEvent - static void kickLocalArtifactReloadEvent(final Sender sender, final ArtifactEvent artifactEvent) { - if (isDisableEvents()) { + public void kickLocalArtifactReloadEvent(final Sender sender, final ArtifactEvent artifactEvent) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM2: kickArtifactReloadEvent [" + artifactEvent + "] - " + sender); + EventUtil.eventLog("IEM2: kickArtifactReloadEvent [" + artifactEvent + "] - " + sender); Runnable runnable = new Runnable() { @Override public void run() { try { // Kick LOCAL - boolean normalOperation = !enableRemoteEventLoopback; - boolean loopbackTestEnabledAndRemoteEventReturned = enableRemoteEventLoopback && sender.isRemote(); + boolean normalOperation = !preferences.isEnableRemoteEventLoopback(); + boolean loopbackTestEnabledAndRemoteEventReturned = + preferences.isEnableRemoteEventLoopback() && sender.isRemote(); if (normalOperation && sender.isLocal() || loopbackTestEnabledAndRemoteEventReturned) { processEventArtifactsAndRelations(sender, artifactEvent); } // NO REMOTE KICK } catch (Exception ex) { - OseeEventManager.eventLog("IEM2 kickArtifactReloadEvent", ex); + EventUtil.eventLog("IEM2 kickArtifactReloadEvent", ex); } } }; @@ -417,34 +384,35 @@ public class InternalEventManager2 { /* * Kick LOCAL and REMOTE branch events */ - static void kickBranchEvent(final Sender sender, final BranchEvent branchEvent) { + public void kickBranchEvent(final Sender sender, final BranchEvent branchEvent) { if (branchEvent.getNetworkSender() == null) { - OseeEventManager.eventLog("IEM2: kickBranchEvent - ERROR networkSender can't be null."); + EventUtil.eventLog("IEM2: kickBranchEvent - ERROR networkSender can't be null."); return; } - if (isDisableEvents()) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM2: kickBranchEvent: type: " + branchEvent.getEventType() + " guid: " + branchEvent.getBranchGuid() + " - " + sender); + EventUtil.eventLog("IEM2: 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 (enableRemoteEventLoopback) { - OseeEventManager.eventLog("IEM2: BranchEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); + if (preferences.isEnableRemoteEventLoopback()) { + EventUtil.eventLog("IEM2: BranchEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); } BranchEventType branchEventType = branchEvent.getEventType(); // Kick LOCAL - boolean normalOperation = !enableRemoteEventLoopback; - boolean loopbackTestEnabledAndRemoteEventReturned = enableRemoteEventLoopback && sender.isRemote(); + 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()) { - RemoteEventManager2.getInstance().kick(FrameworkEventUtil.getRemoteBranchEvent(branchEvent)); + sendRemoteEvent(FrameworkEventUtil.getRemoteBranchEvent(branchEvent)); } } }; @@ -452,38 +420,39 @@ public class InternalEventManager2 { } // Kick LOCAL and REMOTE ArtifactEvent - static void kickArtifactEvent(final Sender sender, final ArtifactEvent artifactEvent) { + public void kickArtifactEvent(final Sender sender, final ArtifactEvent artifactEvent) { if (artifactEvent.getNetworkSender() == null) { - OseeEventManager.eventLog("IEM2: kickArtifactEvent - ERROR networkSender can't be null."); + EventUtil.eventLog("IEM2: kickArtifactEvent - ERROR networkSender can't be null."); return; } - if (isDisableEvents()) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM2: kickArtifactEvent [" + artifactEvent + "] - " + sender); + EventUtil.eventLog("IEM2: 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 (enableRemoteEventLoopback) { - OseeEventManager.eventLog("IEM2: ArtifactEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); + if (preferences.isEnableRemoteEventLoopback()) { + EventUtil.eventLog("IEM2: ArtifactEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); } // Kick LOCAL - boolean normalOperation = !enableRemoteEventLoopback; - boolean loopbackTestEnabledAndRemoteEventReturned = enableRemoteEventLoopback && sender.isRemote(); + 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()) { - RemoteEventManager2.getInstance().kick(FrameworkEventUtil.getRemotePersistEvent(artifactEvent)); + sendRemoteEvent(FrameworkEventUtil.getRemotePersistEvent(artifactEvent)); } } catch (Exception ex) { - OseeEventManager.eventLog("IEM2 kickArtifactEvent", ex); + EventUtil.eventLog("IEM2 kickArtifactEvent", ex); } } }; @@ -491,28 +460,29 @@ public class InternalEventManager2 { } // Kick LOCAL and REMOTE ArtifactEvent - static void kickTransactionEvent(final Sender sender, final TransactionEvent transEvent) { + public void kickTransactionEvent(final Sender sender, final TransactionEvent transEvent) { if (transEvent.getNetworkSender() == null) { - OseeEventManager.eventLog("IEM2: kickTransactionEvent - ERROR networkSender can't be null."); + EventUtil.eventLog("IEM2: kickTransactionEvent - ERROR networkSender can't be null."); return; } - if (isDisableEvents()) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM2: kickTransactionEvent [" + transEvent + "] - " + sender); + EventUtil.eventLog("IEM2: 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 (!enableRemoteEventLoopback) { - OseeEventManager.eventLog("IEM2: TransactionEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); + if (!preferences.isEnableRemoteEventLoopback()) { + EventUtil.eventLog("IEM2: TransactionEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); } // Kick LOCAL - boolean normalOperation = !enableRemoteEventLoopback; - boolean loopbackTestEnabledAndRemoteEventReturned = enableRemoteEventLoopback && sender.isRemote(); + boolean normalOperation = !preferences.isEnableRemoteEventLoopback(); + boolean loopbackTestEnabledAndRemoteEventReturned = + preferences.isEnableRemoteEventLoopback() && sender.isRemote(); if (normalOperation || loopbackTestEnabledAndRemoteEventReturned) { processTransactionEvent(sender, transEvent); } @@ -520,10 +490,10 @@ public class InternalEventManager2 { // Kick REMOTE (If source was Local and this was not a default branch changed event if (sender.isLocal()) { // Kick REMOTE - RemoteEventManager2.getInstance().kick(FrameworkEventUtil.getRemoteTransactionEvent(transEvent)); + sendRemoteEvent(FrameworkEventUtil.getRemoteTransactionEvent(transEvent)); } } catch (Exception ex) { - OseeEventManager.eventLog("IEM2: kickTransactionEvent", ex); + EventUtil.eventLog("IEM2: kickTransactionEvent", ex); } } }; @@ -533,13 +503,13 @@ public class InternalEventManager2 { /* * Kick LOCAL and REMOTE broadcast event */ - static void kickBroadcastEvent(final Sender sender, final BroadcastEvent broadcastEvent) { - if (isDisableEvents()) { + public void kickBroadcastEvent(final Sender sender, final BroadcastEvent broadcastEvent) { + if (preferences.isDisableEvents()) { return; } if (!broadcastEvent.getBroadcastEventType().isPingOrPong()) { - OseeEventManager.eventLog("IEM2: kickBroadcastEvent: type: " + broadcastEvent.getBroadcastEventType().name() + " message: " + broadcastEvent.getMessage() + " - " + sender); + EventUtil.eventLog("IEM2: kickBroadcastEvent: type: " + broadcastEvent.getBroadcastEventType().name() + " message: " + broadcastEvent.getMessage() + " - " + sender); } Runnable runnable = new Runnable() { @Override @@ -552,7 +522,7 @@ public class InternalEventManager2 { // Kick REMOTE (If source was Local and this was not a default branch changed event if (sender.isLocal() && broadcastEvent.getBroadcastEventType().isRemoteEventType()) { - RemoteEventManager2.getInstance().kick(FrameworkEventUtil.getRemoteBroadcastEvent(broadcastEvent)); + sendRemoteEvent(FrameworkEventUtil.getRemoteBroadcastEvent(broadcastEvent)); } } catch (Exception ex) { OseeLog.log(Activator.class, Level.SEVERE, ex); @@ -562,30 +532,47 @@ public class InternalEventManager2 { execute(runnable); } - static boolean isDisableEvents() { - return disableEvents; - } - - public static void setDisableEvents(boolean disableEvents) { - InternalEventManager2.disableEvents = disableEvents; - } - - public static boolean isEnableRemoteEventLoopback() { - return enableRemoteEventLoopback; - } - - public static void setEnableRemoteEventLoopback(boolean enableRemoteEventLoopback) { - InternalEventManager2.enableRemoteEventLoopback = enableRemoteEventLoopback; - } - /** - * If true, all listeners will be called back in main thread. For testing purposes only. + * 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. */ - public static void internalSetPendRunning(boolean pendRunning) { - InternalEventManager2.pendRunning = pendRunning; + private void sendRemoteEvent(final RemoteEvent remoteEvent) { + if (preferences.isNewEvents() && isConnected()) { + EventUtil.eventLog(String.format("REM2: 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("REM2: 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("REM2: Loopback enabled - Returning events as Remote event."); + String newSessionId = GUID.create(); + remoteEvent.getNetworkSender().setSessionId(newSessionId); + try { + frameworkListener.onEvent(remoteEvent); + } catch (RemoteException ex) { + EventUtil.eventLog("REM2: RemoteEvent - onEvent", ex); + } + } } - public static boolean isPendRunning() { - return pendRunning; + 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/event/systems/JiniSkynetEventServiceLookup.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/JiniSkynetEventServiceLookup.java new file mode 100644 index 00000000000..e3bca76dfee --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/JiniSkynetEventServiceLookup.java @@ -0,0 +1,208 @@ +/*******************************************************************************
+ * 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.rmi.RemoteException;
+import java.rmi.server.ExportException;
+import java.util.logging.Level;
+import net.jini.core.entry.Entry;
+import net.jini.core.lookup.ServiceItem;
+import org.eclipse.osee.framework.core.client.ClientSessionManager;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jini.discovery.EclipseJiniClassloader;
+import org.eclipse.osee.framework.jini.discovery.IServiceLookupListener;
+import org.eclipse.osee.framework.jini.discovery.ServiceDataStore;
+import org.eclipse.osee.framework.jini.service.core.SimpleFormattedEntry;
+import org.eclipse.osee.framework.jini.util.OseeJini;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEventListener;
+import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEventService;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.event.EventSystemPreferences;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.RemoteEventServiceEventType;
+import org.eclipse.osee.framework.skynet.core.internal.Activator;
+
+/**
+ * @author Donald G. Dunne
+ */
+public final class JiniSkynetEventServiceLookup implements IServiceLookupListener {
+
+ private final ISkynetEventListener clientEventListener;
+ private String acceptableServiceName;
+ private ISkynetEventService currentEventService;
+ private ISkynetEventListener clientEventListenerRemoteReference;
+ private final EventSystemPreferences preferences;
+
+ public JiniSkynetEventServiceLookup(EventSystemPreferences preferences, ISkynetEventListener clientEventListener) {
+ this.preferences = preferences;
+ this.clientEventListener = clientEventListener;
+ clear();
+ }
+
+ private void clear() {
+ currentEventService = null;
+ clientEventListenerRemoteReference = null;
+ acceptableServiceName = null;
+ }
+
+ public void start() {
+ getClientEventListenerRemoteReference();
+ }
+
+ public void stop() {
+ if (clientEventListenerRemoteReference != null) {
+ ServiceDataStore.getEclipseInstance(EclipseJiniClassloader.getInstance()).removeListener(this);
+ }
+ reset();
+ }
+
+ public ISkynetEventListener getClientEventListenerRemoteReference() {
+ checkJiniRegistration();
+ return clientEventListenerRemoteReference;
+ }
+
+ public void checkJiniRegistration() {
+ if (preferences.isNewEvents()) {
+ return;
+ }
+ if (clientEventListenerRemoteReference == null) {
+ try {
+ // We need to trigger authentication before attempting to get database information from client session manager.
+ UserManager.getUser();
+ acceptableServiceName =
+ ClientSessionManager.getDataStoreName() + ":" + ClientSessionManager.getDataStoreLoginName();
+ clientEventListenerRemoteReference =
+ (ISkynetEventListener) OseeJini.getRemoteReference(clientEventListener);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ clientEventListenerRemoteReference = null;
+ }
+
+ if (clientEventListenerRemoteReference != null) {
+ ServiceDataStore.getEclipseInstance(EclipseJiniClassloader.getInstance()).addListener(this,
+ ISkynetEventService.class);
+ }
+ }
+ }
+
+ private ISkynetEventService getReference() {
+ return currentEventService;
+ }
+
+ public boolean isValid() {
+ return isValidService(currentEventService);
+ }
+
+ public void reset() {
+ setEventService(null);
+ }
+
+ public void kick(ISkynetEvent[] events, ISkynetEventListener... except) {
+ try {
+ getReference().kick(events, except);
+ } catch (ExportException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ } catch (RemoteException ex) {
+ disconnectService(ex);
+ }
+ }
+
+ private boolean isValidService(ISkynetEventService service) {
+ boolean result = false;
+ try {
+ if (service != null) {
+ result = service.isAlive();
+ }
+ } catch (Exception ex) {
+ // Do Nothing
+ result = false;
+ }
+ return result;
+ }
+
+ private synchronized void setEventService(ISkynetEventService service) {
+ if (isValidService(currentEventService)) {
+ try {
+ currentEventService.deregister(getClientEventListenerRemoteReference());
+ } catch (RemoteException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+ currentEventService = service;
+ }
+
+ private void disconnectService(Exception e) {
+ if (preferences.isNewEvents()) {
+ return;
+ }
+ OseeLog.log(Activator.class, Level.WARNING, "Skynet Event Service connection lost\n" + e.toString(), e);
+ setEventService(null);
+ try {
+ OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem1_DisConnected);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+
+ private void connectToService(ISkynetEventService service) {
+ if (preferences.isNewEvents()) {
+ return;
+ }
+ try {
+ ISkynetEventListener clientListener = getClientEventListenerRemoteReference();
+ if (clientListener != null) {
+ service.register(clientListener);
+ setEventService(service);
+ OseeLog.log(Activator.class, Level.INFO,
+ "Skynet Event Service connection established " + acceptableServiceName);
+ OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem1_Connected);
+ } else {
+ OseeLog.log(Activator.class, Level.SEVERE, "Client listener reference was null");
+ }
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+
+ @Override
+ public void serviceAdded(ServiceItem serviceItem) {
+ if (preferences.isNewEvents()) {
+ return;
+ }
+ if (serviceItem.service instanceof ISkynetEventService) {
+ ISkynetEventService service = (ISkynetEventService) serviceItem.service;
+ if (isValidService(service)) {
+ // Check if the service is for the database we are using
+ for (Entry entry : serviceItem.attributeSets) {
+ if (entry instanceof SimpleFormattedEntry) {
+ SimpleFormattedEntry simpleEntry = (SimpleFormattedEntry) entry;
+ if ("db".equals(simpleEntry.name) && acceptableServiceName.equals(simpleEntry.value)) {
+ connectToService(service);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void serviceChanged(ServiceItem serviceItem) {
+ serviceAdded(serviceItem);
+ }
+
+ @Override
+ public void serviceRemoved(ServiceItem serviceItem) {
+ // do nothing
+ }
+}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/InternalEventManager.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/LegacyEventManager.java index 275a3b13132..7793aff64ed 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/InternalEventManager.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/LegacyEventManager.java @@ -8,24 +8,26 @@ * Contributors: * Boeing - initial API and implementation *******************************************************************************/ -package org.eclipse.osee.framework.skynet.core.event; +package org.eclipse.osee.framework.skynet.core.event.systems; import java.lang.reflect.Method; +import java.rmi.RemoteException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; 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.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.enums.RelationSide; import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.jdk.core.util.GUID; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEvent; +import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEventListener; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkAccessControlArtifactsEvent; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactAddedEvent; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactChangeTypeEvent; @@ -49,43 +51,78 @@ 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.ArtifactModType; import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.event.ArtifactTransactionModifiedEvent; +import org.eclipse.osee.framework.skynet.core.event.BranchEventType; +import org.eclipse.osee.framework.skynet.core.event.BroadcastEventType; +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.FrameworkTransactionData; +import org.eclipse.osee.framework.skynet.core.event.IAccessControlEventListener; +import org.eclipse.osee.framework.skynet.core.event.IArtifactModifiedEventListener; +import org.eclipse.osee.framework.skynet.core.event.IArtifactReloadEventListener; +import org.eclipse.osee.framework.skynet.core.event.IArtifactsChangeTypeEventListener; +import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener; +import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener; +import org.eclipse.osee.framework.skynet.core.event.IBroadcastEventListener; +import org.eclipse.osee.framework.skynet.core.event.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener; +import org.eclipse.osee.framework.skynet.core.event.IMergeBranchEventListener; +import org.eclipse.osee.framework.skynet.core.event.IRelationModifiedEventListener; +import org.eclipse.osee.framework.skynet.core.event.IRemoteEventManagerEventListener; +import org.eclipse.osee.framework.skynet.core.event.ITransactionsDeletedEventListener; +import org.eclipse.osee.framework.skynet.core.event.LoadedRelation; +import org.eclipse.osee.framework.skynet.core.event.MergeBranchEventType; +import org.eclipse.osee.framework.skynet.core.event.RemoteEventServiceEventType; +import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.AccessControlEvent; import org.eclipse.osee.framework.skynet.core.internal.Activator; 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.RelationTypeManager; import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts; -import org.eclipse.osee.framework.ui.plugin.event.UnloadedArtifact; import org.eclipse.osee.framework.ui.plugin.event.UnloadedRelation; /** - * Internal implementation of OSEE Event Manager that should only be accessed from RemoteEventManager and - * OseeEventManager classes. + * Internal implementation of OSEE Event Manager that should only be accessed from OseeEventManager classes. * * @author Donald G. Dunne */ -public class InternalEventManager { +public class LegacyEventManager { + + private final Collection<IEventListener> priorityListeners; + private final Collection<IEventListener> listeners; + private final ExecutorService executorService; + private final EventSystemPreferences preferences; + private final JiniSkynetEventServiceLookup serviceLookup; + private final ISkynetEventListener remoteEventReceiver; + + public LegacyEventManager(Collection<IEventListener> listeners, Collection<IEventListener> priorityListeners, ExecutorService executorService, EventSystemPreferences preferences, JiniSkynetEventServiceLookup serviceLookup, ISkynetEventListener remoteEventReceiver) { + this.listeners = listeners; + this.priorityListeners = priorityListeners; + this.executorService = executorService; + this.preferences = preferences; + this.serviceLookup = serviceLookup; + this.remoteEventReceiver = remoteEventReceiver; + } - private static final List<IEventListener> priorityListeners = new CopyOnWriteArrayList<IEventListener>(); - private static final List<IEventListener> listeners = new CopyOnWriteArrayList<IEventListener>(); - public static final Collection<UnloadedArtifact> EMPTY_UNLOADED_ARTIFACTS = Collections.emptyList(); - private static boolean disableEvents = false; + public void start() { + serviceLookup.start(); + } - private static final ThreadFactory threadFactory = new OseeEventThreadFactory("Osee Events"); - private static final ExecutorService executorService = Executors.newFixedThreadPool( - Runtime.getRuntime().availableProcessors(), threadFactory); + public void stop() { + serviceLookup.stop(); + } - // This will disable all Local TransactionEvents and enable loopback routing of Remote TransactionEvents back - // through the RemoteEventService as if they came from another client. This is for testing purposes only and - // should be reset to false before release. - private static boolean enableRemoteEventLoopback = false; + public boolean isConnected() { + return preferences.isOldEvents() && serviceLookup.isValid(); + } // Kick LOCAL "remote event manager" event - static void kickRemoteEventManagerEvent(final Sender sender, final RemoteEventServiceEventType remoteEventServiceEventType) { - if (isDisableEvents()) { + public void kickRemoteEventManagerEvent(final Sender sender, final RemoteEventServiceEventType remoteEventServiceEventType) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM1: kickRemoteEventManagerEvent: type: " + remoteEventServiceEventType + " - " + sender); + EventUtil.eventLog("IEM1: kickRemoteEventManagerEvent: type: " + remoteEventServiceEventType + " - " + sender); Runnable runnable = new Runnable() { @Override public void run() { @@ -106,13 +143,13 @@ public class InternalEventManager { /* * Kick LOCAL and REMOTE broadcast event */ - static void kickBroadcastEvent(final Sender sender, final BroadcastEventType broadcastEventType, final String[] userIds, final String message) { - if (isDisableEvents()) { + public void kickBroadcastEvent(final Sender sender, final BroadcastEventType broadcastEventType, final String[] userIds, final String message) { + if (preferences.isDisableEvents()) { return; } if (!broadcastEventType.isPingOrPong()) { - OseeEventManager.eventLog("IEM1: kickBroadcastEvent: type: " + broadcastEventType.name() + " message: " + message + " - " + sender); + EventUtil.eventLog("IEM1: kickBroadcastEvent: type: " + broadcastEventType.name() + " message: " + message + " - " + sender); } Runnable runnable = new Runnable() { @Override @@ -126,7 +163,7 @@ public class InternalEventManager { // Kick REMOTE (If source was Local and this was not a default branch changed event if (sender.isLocal() && broadcastEventType.isRemoteEventType()) { - RemoteEventManager.kick(new NetworkBroadcastEvent(broadcastEventType.name(), message, + sendRemoteEvent(new NetworkBroadcastEvent(broadcastEventType.name(), message, sender.getNetworkSender())); } } catch (Exception ex) { @@ -140,24 +177,24 @@ public class InternalEventManager { /* * Kick LOCAL and REMOTE branch events */ - static void kickBranchEvent(final Sender sender, final BranchEventType branchEventType, final int branchId) { - if (isDisableEvents()) { + public void kickBranchEvent(final Sender sender, final BranchEventType branchEventType, final int branchId) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM1: kickBranchEvent: type: " + branchEventType + " id: " + branchId + " - " + sender); + EventUtil.eventLog("IEM1: kickBranchEvent: type: " + branchEventType + " id: " + branchId + " - " + sender); Runnable runnable = new Runnable() { @Override public void run() { // Log if this is a loopback and what is happening - if (enableRemoteEventLoopback) { + if (preferences.isEnableRemoteEventLoopback()) { OseeLog.log( - InternalEventManager.class, + LegacyEventManager.class, Level.WARNING, "IEM1: BranchEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); } // Kick LOCAL - if (!enableRemoteEventLoopback || enableRemoteEventLoopback && branchEventType.isRemoteEventType() && sender.isRemote()) { + if (!preferences.isEnableRemoteEventLoopback() || preferences.isEnableRemoteEventLoopback() && branchEventType.isRemoteEventType() && sender.isRemote()) { if (sender.isRemote() || sender.isLocal() && branchEventType.isLocalEventType()) { safelyInvokeListeners(IBranchEventListener.class, "handleBranchEventREM1", sender, branchEventType, branchId); @@ -167,18 +204,18 @@ public class InternalEventManager { if (sender.isLocal() && branchEventType.isRemoteEventType()) { if (branchEventType == BranchEventType.Added) { - RemoteEventManager.kick(new NetworkNewBranchEvent(branchId, sender.getNetworkSender())); + sendRemoteEvent(new NetworkNewBranchEvent(branchId, sender.getNetworkSender())); } else if (branchEventType == BranchEventType.Deleted) { - RemoteEventManager.kick(new NetworkDeletedBranchEvent(branchId, sender.getNetworkSender())); + sendRemoteEvent(new NetworkDeletedBranchEvent(branchId, sender.getNetworkSender())); } else if (branchEventType == BranchEventType.Purged) { - RemoteEventManager.kick(new NetworkPurgeBranchEvent(branchId, sender.getNetworkSender())); + sendRemoteEvent(new NetworkPurgeBranchEvent(branchId, sender.getNetworkSender())); } else if (branchEventType == BranchEventType.Committed) { - RemoteEventManager.kick(new NetworkCommitBranchEvent(branchId, sender.getNetworkSender())); + sendRemoteEvent(new NetworkCommitBranchEvent(branchId, sender.getNetworkSender())); } else if (branchEventType == BranchEventType.Renamed) { Branch branch = null; try { branch = BranchManager.getBranch(branchId); - RemoteEventManager.kick(new NetworkRenameBranchEvent(branchId, sender.getNetworkSender(), + sendRemoteEvent(new NetworkRenameBranchEvent(branchId, sender.getNetworkSender(), branch.getName(), branch.getShortName())); } catch (OseeCoreException ex) { // do nothing @@ -191,22 +228,22 @@ public class InternalEventManager { } // Kick LOCAL and REMOTE branch events - static void kickMergeBranchEvent(final Sender sender, final MergeBranchEventType branchEventType, final int branchId) { - OseeEventManager.eventLog("IEM1: kickMergeBranchEvent: type: " + branchEventType + " id: " + branchId + " - " + sender); + public void kickMergeBranchEvent(final Sender sender, final MergeBranchEventType branchEventType, final int branchId) { + EventUtil.eventLog("IEM1: kickMergeBranchEvent: type: " + branchEventType + " id: " + branchId + " - " + sender); Runnable runnable = new Runnable() { @Override public void run() { try { // Log if this is a loopback and what is happening - if (enableRemoteEventLoopback) { + if (preferences.isEnableRemoteEventLoopback()) { OseeLog.log( - InternalEventManager.class, + LegacyEventManager.class, Level.WARNING, "IEM1: MergeBranchEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); } // Kick LOCAL - if (!enableRemoteEventLoopback || enableRemoteEventLoopback && branchEventType.isRemoteEventType() && sender.isRemote()) { + if (!preferences.isEnableRemoteEventLoopback() || preferences.isEnableRemoteEventLoopback() && branchEventType.isRemoteEventType() && sender.isRemote()) { if (sender.isRemote() || sender.isLocal() && branchEventType.isLocalEventType()) { safelyInvokeListeners(IMergeBranchEventListener.class, "handleMergeBranchEvent", sender, branchEventType, branchId); @@ -216,8 +253,7 @@ public class InternalEventManager { if (sender.isLocal() && branchEventType.isRemoteEventType()) { if (branchEventType == MergeBranchEventType.ConflictResolved) { - RemoteEventManager.kick(new NetworkMergeBranchConflictResolvedEvent(branchId, - sender.getNetworkSender())); + sendRemoteEvent(new NetworkMergeBranchConflictResolvedEvent(branchId, sender.getNetworkSender())); } } } catch (Exception ex) { @@ -228,14 +264,14 @@ public class InternalEventManager { execute(runnable); } - private static void execute(Runnable runnable) { + private void execute(Runnable runnable) { executorService.submit(runnable); } /* * Kick LOCAL and REMOTE access control events */ - static void kickAccessControlArtifactsEvent(final Sender sender, final AccessControlEvent accessControlEvent, final LoadedArtifacts loadedArtifacts) { + public void kickAccessControlArtifactsEvent(final Sender sender, final AccessControlEvent accessControlEvent, final LoadedArtifacts loadedArtifacts) { if (sender == null) { throw new IllegalArgumentException("sender can not be null"); } @@ -245,10 +281,10 @@ public class InternalEventManager { if (loadedArtifacts == null) { throw new IllegalArgumentException("loadedArtifacts can not be null"); } - if (isDisableEvents()) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM1: kickAccessControlEvent - type: " + accessControlEvent.getEventType() + sender + " loadedArtifacts: " + loadedArtifacts); + EventUtil.eventLog("IEM1: kickAccessControlEvent - type: " + accessControlEvent.getEventType() + sender + " loadedArtifacts: " + loadedArtifacts); Runnable runnable = new Runnable() { @Override public void run() { @@ -267,9 +303,8 @@ public class InternalEventManager { Collection<Integer> artifactIds = loadedArtifacts.getAllArtifactIds(); Collection<Integer> artifactTypeIds = loadedArtifacts.getAllArtifactTypeIds(); - RemoteEventManager.kick(new NetworkAccessControlArtifactsEvent( - accessControlEvent.getEventType().name(), branchId == null ? -1 : branchId, artifactIds, - artifactTypeIds, sender.getNetworkSender())); + sendRemoteEvent(new NetworkAccessControlArtifactsEvent(accessControlEvent.getEventType().name(), + branchId == null ? -1 : branchId, artifactIds, artifactTypeIds, sender.getNetworkSender())); } } catch (OseeCoreException ex) { OseeLog.log(Activator.class, Level.SEVERE, ex); @@ -280,7 +315,7 @@ public class InternalEventManager { } // Kick LOCAL artifact modified event; This event does NOT go external - static void kickArtifactModifiedEvent(final Sender sender, final ArtifactModType artifactModType, final Artifact artifact) { + public void kickArtifactModifiedEvent(final Sender sender, final ArtifactModType artifactModType, final Artifact artifact) { // OseeEventManager.eventLog("IEM1: kickArtifactModifiedEvent - " + artifactModType + " - " + artifact.getGuid() + " - " + sender + " - " + artifact.getDirtySkynetAttributeChanges()); Runnable runnable = new Runnable() { @Override @@ -294,7 +329,7 @@ public class InternalEventManager { } // Kick LOCAL relation modified event; This event does NOT go external - static void kickRelationModifiedEvent(final Sender sender, final RelationEventType relationEventType, final RelationLink link, final Branch branch, final String relationType) { + public void kickRelationModifiedEvent(final Sender sender, final RelationEventType relationEventType, final RelationLink link, final Branch branch, final String relationType) { // OseeEventManager.eventLog("IEM1: kickRelationModifiedEvent - " + relationEventType + " - " + link + " - " + sender); Runnable runnable = new Runnable() { @Override @@ -308,11 +343,11 @@ public class InternalEventManager { } // Kick LOCAL and REMOTE purged event depending on sender - static void kickArtifactsPurgedEvent(final Sender sender, final LoadedArtifacts loadedArtifacts) { - if (isDisableEvents()) { + public void kickArtifactsPurgedEvent(final Sender sender, final LoadedArtifacts loadedArtifacts) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM1: kickArtifactsPurgedEvent " + sender + " - " + loadedArtifacts); + EventUtil.eventLog("IEM1: kickArtifactsPurgedEvent " + sender + " - " + loadedArtifacts); Runnable runnable = new Runnable() { @Override public void run() { @@ -322,7 +357,7 @@ public class InternalEventManager { // Kick REMOTE (If source was Local and this was not a default branch changed event try { if (sender.isLocal()) { - RemoteEventManager.kick(new NetworkArtifactPurgeEvent( + sendRemoteEvent(new NetworkArtifactPurgeEvent( loadedArtifacts.getLoadedArtifacts().iterator().next().getBranch().getId(), loadedArtifacts.getAllArtifactIds(), loadedArtifacts.getAllArtifactTypeIds(), sender.getNetworkSender())); @@ -336,11 +371,11 @@ public class InternalEventManager { } // Kick LOCAL and REMOTE artifact change type depending on sender - static void kickArtifactsChangeTypeEvent(final Sender sender, final int toArtifactTypeId, final LoadedArtifacts loadedArtifacts) { - if (isDisableEvents()) { + public void kickArtifactsChangeTypeEvent(final Sender sender, final int toArtifactTypeId, final LoadedArtifacts loadedArtifacts) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM1: kickArtifactsChangeTypeEvent " + sender + " - " + loadedArtifacts); + EventUtil.eventLog("IEM1: kickArtifactsChangeTypeEvent " + sender + " - " + loadedArtifacts); Runnable runnable = new Runnable() { @Override public void run() { @@ -350,7 +385,7 @@ public class InternalEventManager { // Kick REMOTE (If source was Local and this was not a default branch changed event try { if (sender.isLocal()) { - RemoteEventManager.kick(new NetworkArtifactChangeTypeEvent( + sendRemoteEvent(new NetworkArtifactChangeTypeEvent( loadedArtifacts.getLoadedArtifacts().iterator().next().getBranch().getId(), loadedArtifacts.getAllArtifactIds(), loadedArtifacts.getAllArtifactTypeIds(), toArtifactTypeId, sender.getNetworkSender())); @@ -364,12 +399,12 @@ public class InternalEventManager { } // Kick LOCAL and remote transaction deleted event - static void kickTransactionsPurgedEvent(final Sender sender, final int[] transactionIds) { + public void kickTransactionsPurgedEvent(final Sender sender, final int[] transactionIds) { //TODO This needs to be converted into the individual artifacts and relations that were deleted/modified - if (isDisableEvents()) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM1: kickTransactionsDeletedEvent " + sender + " - " + transactionIds.length); + EventUtil.eventLog("IEM1: kickTransactionsDeletedEvent " + sender + " - " + transactionIds.length); Runnable runnable = new Runnable() { @Override public void run() { @@ -379,7 +414,7 @@ public class InternalEventManager { // Kick REMOTE (If source was Local and this was not a default branch changed event try { if (sender.isLocal()) { - RemoteEventManager.kick(new NetworkTransactionDeletedEvent(sender.getNetworkSender(), transactionIds)); + sendRemoteEvent(new NetworkTransactionDeletedEvent(sender.getNetworkSender(), transactionIds)); } } catch (Exception ex) { OseeLog.log(Activator.class, Level.SEVERE, ex); @@ -390,11 +425,11 @@ public class InternalEventManager { } // Kick LOCAL and REMOTE ArtifactEvent - static void kickPersistEvent(final Sender sender, Collection<ArtifactTransactionModifiedEvent> xModifiedEvents) { - if (isDisableEvents()) { + public void kickPersistEvent(final Sender sender, Collection<ArtifactTransactionModifiedEvent> xModifiedEvents) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM1: kickPersistEvent #ModEvents: " + xModifiedEvents.size() + " - " + sender); + EventUtil.eventLog("IEM1: kickPersistEvent #ModEvents: " + xModifiedEvents.size() + " - " + sender); final Collection<ArtifactTransactionModifiedEvent> xModifiedEventsCopy = new ArrayList<ArtifactTransactionModifiedEvent>(); xModifiedEventsCopy.addAll(xModifiedEvents); @@ -405,15 +440,15 @@ public class InternalEventManager { FrameworkTransactionData transData = createTransactionDataRollup(xModifiedEventsCopy); try { // Log if this is a loopback and what is happening - if (enableRemoteEventLoopback) { + if (preferences.isEnableRemoteEventLoopback()) { OseeLog.log( - InternalEventManager.class, + LegacyEventManager.class, Level.WARNING, "IEM1: ArtifactEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); } // Kick LOCAL - if (!enableRemoteEventLoopback || enableRemoteEventLoopback && sender.isRemote()) { + if (!preferences.isEnableRemoteEventLoopback() || preferences.isEnableRemoteEventLoopback() && sender.isRemote()) { safelyInvokeListeners(IFrameworkTransactionEventListener.class, "handleFrameworkTransactionEvent", sender, transData); } @@ -421,7 +456,7 @@ public class InternalEventManager { // Kick REMOTE (If source was Local and this was not a default branch changed event if (sender.isLocal()) { List<ISkynetEvent> events = generateNetworkSkynetEvents(sender, xModifiedEventsCopy); - RemoteEventManager.kick(events); + sendRemoteEvent(events); } } catch (Exception ex) { OseeLog.log(Activator.class, Level.SEVERE, ex); @@ -432,25 +467,25 @@ public class InternalEventManager { } // Kick LOCAL ArtifactReloadEvent - static void kickArtifactReloadEvent(final Sender sender, final Collection<? extends Artifact> artifacts) { - if (isDisableEvents()) { + public void kickArtifactReloadEvent(final Sender sender, final Collection<? extends Artifact> artifacts) { + if (preferences.isDisableEvents()) { return; } - OseeEventManager.eventLog("IEM1: kickArtifactReloadEvent #Reloads: " + artifacts.size() + " - " + sender); + EventUtil.eventLog("IEM1: kickArtifactReloadEvent #Reloads: " + artifacts.size() + " - " + sender); Runnable runnable = new Runnable() { @Override public void run() { try { // Log if this is a loopback and what is happening - if (enableRemoteEventLoopback) { + if (preferences.isEnableRemoteEventLoopback()) { OseeLog.log( - InternalEventManager.class, + LegacyEventManager.class, Level.WARNING, "IEM1: kickArtifactReloadEvent Loopback enabled" + (sender.isLocal() ? " - Ignoring Local Kick" : " - Kicking Local from Loopback")); } // Kick LOCAL - if (!enableRemoteEventLoopback) { + if (!preferences.isEnableRemoteEventLoopback()) { safelyInvokeListeners(IArtifactReloadEventListener.class, "handleReloadEvent", sender, artifacts); } } catch (Exception ex) { @@ -461,72 +496,7 @@ public class InternalEventManager { execute(runnable); } - /** - * Add a priority listener. This should only be done for caches where they need to be updated before all other - * listeners are called. - */ - static void addPriorityListener(IEventListener listener) { - if (listener == null) { - throw new IllegalArgumentException("listener can not be null"); - } - if (!priorityListeners.contains(listener)) { - priorityListeners.add(listener); - } - OseeEventManager.eventLog("IEM1: addPriorityListener (" + priorityListeners.size() + ") " + listener); - } - - static void addListener(IEventListener listener) { - if (listener == null) { - throw new IllegalArgumentException("listener can not be null"); - } - if (!listeners.contains(listener)) { - listeners.add(listener); - } - OseeEventManager.eventLog("IEM1: addListener (" + listeners.size() + ") " + listener); - } - - static void removeListeners(IEventListener listener) { - OseeEventManager.eventLog("IEM1: removeListener: (" + listeners.size() + ") " + listener); - listeners.remove(listener); - priorityListeners.remove(listener); - } - - // This method clears all listeners. Should only be used for testing purposes. - public static void removeAllListeners() { - listeners.clear(); - priorityListeners.clear(); - } - - public static String getObjectSafeName(Object object) { - try { - return object.toString(); - } catch (Exception ex) { - return object.getClass().getSimpleName() + " - exception on toString: " + ex.getLocalizedMessage(); - } - } - - static boolean isDisableEvents() { - return disableEvents; - } - - static void setDisableEvents(boolean disableEvents) { - InternalEventManager.disableEvents = disableEvents; - } - - static String getListenerReport() { - List<String> listenerStrs = new ArrayList<String>(); - for (IEventListener listener : priorityListeners) { - listenerStrs.add("Priority: " + getObjectSafeName(listener)); - } - for (IEventListener listener : listeners) { - listenerStrs.add(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); - } - - private static List<ISkynetEvent> generateNetworkSkynetEvents(Sender sender, Collection<ArtifactTransactionModifiedEvent> xModifiedEvents) { + private List<ISkynetEvent> generateNetworkSkynetEvents(Sender sender, Collection<ArtifactTransactionModifiedEvent> xModifiedEvents) { List<ISkynetEvent> events = new ArrayList<ISkynetEvent>(); for (ArtifactTransactionModifiedEvent xModifiedEvent : xModifiedEvents) { events.add(generateNetworkSkynetEvent(xModifiedEvent, sender)); @@ -534,7 +504,7 @@ public class InternalEventManager { return events; } - private static ISkynetEvent generateNetworkSkynetEvent(ArtifactTransactionModifiedEvent xModifiedEvent, Sender sender) { + private ISkynetEvent generateNetworkSkynetEvent(ArtifactTransactionModifiedEvent xModifiedEvent, Sender sender) { ISkynetEvent ret = null; if (xModifiedEvent instanceof ArtifactModifiedEvent) { ret = generateNetworkSkynetArtifactEvent((ArtifactModifiedEvent) xModifiedEvent, sender); @@ -544,7 +514,7 @@ public class InternalEventManager { return ret; } - private static ISkynetEvent generateNetworkSkynetArtifactEvent(ArtifactModifiedEvent artEvent, Sender sender) { + private ISkynetEvent generateNetworkSkynetArtifactEvent(ArtifactModifiedEvent artEvent, Sender sender) { SkynetArtifactEventBase eventBase = getArtifactEventBase(artEvent, sender); ISkynetEvent ret; if (artEvent.artifactModType == ArtifactModType.Changed) { @@ -554,13 +524,13 @@ public class InternalEventManager { } else if (artEvent.artifactModType == ArtifactModType.Deleted) { ret = new NetworkArtifactDeletedEvent(eventBase); } else { - OseeLog.log(InternalEventManager.class, Level.SEVERE, "Unhandled xArtifactModifiedEvent event: " + artEvent); + OseeLog.log(LegacyEventManager.class, Level.SEVERE, "Unhandled xArtifactModifiedEvent event: " + artEvent); ret = null; } return ret; } - private static SkynetArtifactEventBase getArtifactEventBase(ArtifactModifiedEvent artEvent, Sender sender) { + private SkynetArtifactEventBase getArtifactEventBase(ArtifactModifiedEvent artEvent, Sender sender) { Artifact artifact = artEvent.artifact; SkynetArtifactEventBase eventBase = new SkynetArtifactEventBase(artifact.getBranch().getId(), artEvent.transactionNumber, artifact.getArtId(), @@ -585,7 +555,7 @@ public class InternalEventManager { } else if (relEvent.relationEventType == RelationEventType.Added) { networkEvent = new NetworkRelationLinkCreatedEvent(eventBase, rationale, descriptorName); } else { - OseeLog.log(InternalEventManager.class, Level.SEVERE, "Unhandled xRelationModifiedEvent event: " + relEvent); + OseeLog.log(LegacyEventManager.class, Level.SEVERE, "Unhandled xRelationModifiedEvent event: " + relEvent); networkEvent = null; } return networkEvent; @@ -759,7 +729,7 @@ public class InternalEventManager { return transData; } - public static void safelyInvokeListeners(Class<? extends IEventListener> c, String methodName, Object... args) { + public void safelyInvokeListeners(Class<? extends IEventListener> c, String methodName, Object... args) { for (IEventListener listener : priorityListeners) { try { if (c.isInstance(listener)) { @@ -788,11 +758,48 @@ public class InternalEventManager { } } - public static boolean isEnableRemoteEventLoopback() { - return enableRemoteEventLoopback; + public void sendRemoteEvent(Collection<ISkynetEvent> events) { + sendRemoteEvent(events.toArray(new ISkynetEvent[events.size()])); } - public static void setEnableRemoteEventLoopback(boolean enableRemoteEventLoopback) { - InternalEventManager.enableRemoteEventLoopback = enableRemoteEventLoopback; + private void sendRemoteEvent(final ISkynetEvent... events) { + if (preferences.isOldEvents() && isConnected()) { + Job job = new Job("Send Event") { + @Override + protected IStatus run(IProgressMonitor monitor) { + serviceLookup.kick(events, serviceLookup.getClientEventListenerRemoteReference()); + return Status.OK_STATUS; + } + }; + + job.schedule(); + } + /* + * This 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. + */ + if (preferences.isEnableRemoteEventLoopback()) { + EventUtil.eventLog("REM: Loopback enabled - Returning events as Remote event."); + Thread thread = new Thread() { + @Override + public void run() { + try { + String newSessionId = GUID.create(); + for (ISkynetEvent event : events) { + event.getNetworkSender().sessionId = newSessionId; + } + remoteEventReceiver.onEvent(events); + } catch (RemoteException ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + + } + } + }; + thread.start(); + } } + } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/LegacyRemoteEventReceiver.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/LegacyRemoteEventReceiver.java new file mode 100644 index 00000000000..fef0f35c4bf --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/LegacyRemoteEventReceiver.java @@ -0,0 +1,476 @@ +/*******************************************************************************
+ * 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.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+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.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.framework.core.enums.BranchState;
+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.cache.BranchCache;
+import org.eclipse.osee.framework.core.model.type.RelationType;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.event.skynet.ASkynetEventListener;
+import org.eclipse.osee.framework.messaging.event.skynet.ISkynetArtifactEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.ISkynetEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.ISkynetRelationLinkEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkAccessControlArtifactsEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactChangeTypeEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactDeletedEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactModifiedEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkArtifactPurgeEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkBroadcastEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkCommitBranchEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkDeletedBranchEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkNewBranchEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkPurgeBranchEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkRelationLinkCreatedEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkRelationLinkDeletedEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkRelationLinkRationalModifiedEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkRenameBranchEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkTransactionDeletedEvent;
+import org.eclipse.osee.framework.messaging.event.skynet.event.SkynetAttributeChange;
+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.ArtifactModType;
+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.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
+import org.eclipse.osee.framework.skynet.core.event.AccessControlEventType;
+import org.eclipse.osee.framework.skynet.core.event.ArtifactTransactionModifiedEvent;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.BroadcastEventType;
+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.Sender;
+import org.eclipse.osee.framework.skynet.core.event2.AccessControlEvent;
+import org.eclipse.osee.framework.skynet.core.internal.Activator;
+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;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.event.UnloadedArtifact;
+import org.eclipse.osee.framework.ui.plugin.event.UnloadedRelation;
+
+/**
+ * @author Donald G. Dunne
+ */
+public final class LegacyRemoteEventReceiver extends ASkynetEventListener {
+ private static final long serialVersionUID = -3017349745450262540L;
+
+ private static final ISchedulingRule mutexRule = new ISchedulingRule() {
+
+ @Override
+ public boolean contains(ISchedulingRule rule) {
+ return rule == this;
+ }
+
+ @Override
+ public boolean isConflicting(ISchedulingRule rule) {
+ return rule == this;
+ }
+ };
+
+ private LegacyEventManager legacyEventManager;
+
+ public LegacyRemoteEventReceiver() {
+ super();
+ }
+
+ public void setInternalEventManager(LegacyEventManager legacyEventManager) {
+ this.legacyEventManager = legacyEventManager;
+ }
+
+ @Override
+ public void onEvent(final ISkynetEvent[] events) {
+ final List<ArtifactTransactionModifiedEvent> xModifiedEvents = new LinkedList<ArtifactTransactionModifiedEvent>();
+ Job job = new Job("Receive Event") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ Sender lastArtifactRelationModChangeSender = null;
+
+ for (ISkynetEvent event : events) {
+
+ Sender sender = new Sender(event.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()) {
+ continue;
+ }
+
+ if (event instanceof NetworkAccessControlArtifactsEvent) {
+ try {
+ AccessControlEvent accessControlEvent = new AccessControlEvent();
+ AccessControlEventType accessControlModType =
+ AccessControlEventType.valueOf(((NetworkAccessControlArtifactsEvent) event).getAccessControlModTypeName());
+ accessControlEvent.setEventType(accessControlModType);
+ NetworkAccessControlArtifactsEvent accessEvent = (NetworkAccessControlArtifactsEvent) event;
+ Integer[] artIds =
+ accessEvent.getArtifactIds().toArray(new Integer[accessEvent.getArtifactIds().size()]);
+ Branch branch = BranchManager.getBranch(accessEvent.getId());
+ for (int x = 0; x < accessEvent.getArtifactIds().size(); x++) {
+ Artifact cachedArt = ArtifactQuery.getArtifactFromId(artIds[x], branch);
+ if (cachedArt != null) {
+ accessControlEvent.getArtifacts().add(cachedArt.getBasicGuidArtifact());
+ }
+ }
+ LoadedArtifacts loadedArtifacts =
+ new LoadedArtifacts(accessEvent.getId(), accessEvent.getArtifactIds(),
+ accessEvent.getArtifactTypeIds());
+ OseeEventManager.kickAccessControlArtifactsEvent(sender, accessControlEvent, loadedArtifacts);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkRenameBranchEvent) {
+ int branchId = ((NetworkRenameBranchEvent) event).getId();
+ try {
+ Branch branch = BranchManager.getBranch(branchId);
+ branch.setName(((NetworkRenameBranchEvent) event).getBranchName());
+ branch.clearDirty();
+ try {
+ legacyEventManager.kickBranchEvent(sender, BranchEventType.Renamed, branchId);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkNewBranchEvent) {
+ int branchId = ((NetworkNewBranchEvent) event).getId();
+ try {
+ legacyEventManager.kickBranchEvent(sender, BranchEventType.Added, branchId);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkDeletedBranchEvent) {
+ int branchId = ((NetworkDeletedBranchEvent) event).getId();
+ try {
+ Branch branch =
+ Activator.getInstance().getOseeCacheService().getBranchCache().getById(branchId);
+ if (branch != null) {
+ branch.setBranchState(BranchState.DELETED);
+ branch.clearDirty();
+ }
+ legacyEventManager.kickBranchEvent(sender, BranchEventType.Deleted, branchId);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkPurgeBranchEvent) {
+ int branchId = ((NetworkPurgeBranchEvent) event).getId();
+ try {
+ BranchCache cache = Activator.getInstance().getOseeCacheService().getBranchCache();
+ Branch branch = cache.getById(branchId);
+ if (branch != null) {
+ cache.decache(branch);
+ }
+ legacyEventManager.kickBranchEvent(sender, BranchEventType.Purged, branchId);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkCommitBranchEvent) {
+ int branchId = ((NetworkCommitBranchEvent) event).getId();
+ try {
+ try {
+ TransactionManager.clearCommitArtifactCacheForAssociatedArtifact(BranchManager.getAssociatedArtifact(BranchManager.getBranch(branchId)));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ legacyEventManager.kickBranchEvent(sender, BranchEventType.Committed, branchId);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkBroadcastEvent) {
+ try {
+ final BroadcastEventType broadcastEventType =
+ BroadcastEventType.valueOf(((NetworkBroadcastEvent) event).getBroadcastEventTypeName());
+ if (broadcastEventType == null) {
+ OseeLog.log(
+ Activator.class,
+ Level.SEVERE,
+ "Unknown broadcast event type \"" + ((NetworkBroadcastEvent) event).getBroadcastEventTypeName() + "\"",
+ new IllegalArgumentException());
+ } else {
+ legacyEventManager.kickBroadcastEvent(sender, broadcastEventType,
+ ((NetworkBroadcastEvent) event).getUserIds(),
+ ((NetworkBroadcastEvent) event).getMessage());
+ }
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof ISkynetArtifactEvent) {
+ try {
+ updateArtifacts(sender, (ISkynetArtifactEvent) event, xModifiedEvents);
+ lastArtifactRelationModChangeSender = sender;
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof ISkynetRelationLinkEvent) {
+ try {
+ updateRelations(sender, (ISkynetRelationLinkEvent) event, xModifiedEvents);
+ lastArtifactRelationModChangeSender = sender;
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkArtifactChangeTypeEvent) {
+ try {
+ LoadedArtifacts loadedArtifacts =
+ new LoadedArtifacts(((NetworkArtifactChangeTypeEvent) event).getId(),
+ ((NetworkArtifactChangeTypeEvent) event).getArtifactIds(),
+ ((NetworkArtifactChangeTypeEvent) event).getArtifactTypeIds());
+ legacyEventManager.kickArtifactsChangeTypeEvent(sender,
+ ((NetworkArtifactChangeTypeEvent) event).getToArtifactTypeId(), loadedArtifacts);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkArtifactPurgeEvent) {
+ try {
+ LoadedArtifacts loadedArtifacts =
+ new LoadedArtifacts(((NetworkArtifactPurgeEvent) event).getId(),
+ ((NetworkArtifactPurgeEvent) event).getArtifactIds(),
+ ((NetworkArtifactPurgeEvent) event).getArtifactTypeIds());
+ for (Artifact artifact : loadedArtifacts.getLoadedArtifacts()) {
+ //This is because applications may still have a reference to the artifact
+ for (RelationLink link : RelationManager.getRelationsAll(artifact.getArtId(),
+ artifact.getBranch().getId(), false)) {
+ link.internalRemoteEventDelete();
+ }
+ ArtifactCache.deCache(artifact);
+ artifact.internalSetDeleted();
+ }
+ legacyEventManager.kickArtifactsPurgedEvent(sender, loadedArtifacts);
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ } else if (event instanceof NetworkTransactionDeletedEvent) {
+ try {
+ legacyEventManager.kickTransactionsPurgedEvent(sender,
+ ((NetworkTransactionDeletedEvent) event).getTransactionIds());
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ if (xModifiedEvents.size() > 0) {
+ /*
+ * Since transaction events are a collection of ArtifactModfied and RelationModified events, create a
+ * new Sender based on the last sender for these events.
+ */
+ Sender transactionSender =
+ new Sender("RemoteEventManager", lastArtifactRelationModChangeSender.getOseeSession());
+ legacyEventManager.kickPersistEvent(transactionSender, xModifiedEvents);
+ }
+ } catch (Exception ex) {
+ // don't want exceptions poping up; just log and return nicely
+ OseeLog.log(Activator.class, Level.SEVERE, "REM Receive Event Exception", ex);
+ }
+ return Status.OK_STATUS;
+ }
+
+ };
+ job.setSystem(true);
+ job.setUser(false);
+ job.setRule(mutexRule);
+ job.schedule();
+ }
+
+ /**
+ * Updates local cache
+ *
+ * @param event
+ */
+ private void updateArtifacts(Sender sender, ISkynetArtifactEvent event, Collection<ArtifactTransactionModifiedEvent> xModifiedEvents) {
+ if (event == null) {
+ return;
+ }
+
+ try {
+ int artId = event.getArtId();
+ int artTypeId = event.getArtTypeId();
+ List<String> dirtyAttributeName = new LinkedList<String>();
+
+ if (event instanceof NetworkArtifactModifiedEvent) {
+ int branchId = ((NetworkArtifactModifiedEvent) event).getId();
+ Artifact artifact = ArtifactCache.getActive(artId, branchId);
+ if (artifact == null) {
+ UnloadedArtifact unloadedArtifact = new UnloadedArtifact(branchId, artId, artTypeId);
+ xModifiedEvents.add(new ArtifactModifiedEvent(sender, ArtifactModType.Changed, unloadedArtifact));
+ } else if (!artifact.isHistorical()) {
+ for (SkynetAttributeChange skynetAttributeChange : ((NetworkArtifactModifiedEvent) event).getAttributeChanges()) {
+ if (!OseeEventManager.getPreferences().isEnableRemoteEventLoopback()) {
+ try {
+ Attribute<?> attribute =
+ artifact.getAttributeById(skynetAttributeChange.getAttributeId(), true);
+ // Attribute already exists (but may be deleted), process update
+ // Process MODIFIED / DELETED attribute
+ if (attribute != null) {
+ if (attribute.isDirty()) {
+ dirtyAttributeName.add(attribute.getNameValueDescription());
+ EventUtil.eventLog(String.format("%s's attribute %d [/n%s/n] has been overwritten.",
+ artifact.getSafeName(), attribute.getId(), attribute.toString()));
+ }
+ try {
+ ModificationType modificationType = skynetAttributeChange.getModificationType();
+ if (modificationType == null) {
+ OseeLog.log(
+ Activator.class,
+ Level.SEVERE,
+ String.format("MOD1: Can't get mod type for %s's attribute %d.",
+ artifact.getArtifactTypeName(), skynetAttributeChange.getAttributeId()));
+ continue;
+ }
+ if (modificationType.isDeleted()) {
+ attribute.internalSetModificationType(modificationType);
+ } else {
+ attribute.getAttributeDataProvider().loadData(skynetAttributeChange.getData());
+ }
+ attribute.internalSetGammaId(skynetAttributeChange.getGammaId());
+ attribute.setNotDirty();
+ } catch (OseeCoreException ex) {
+ EventUtil.eventLog(String.format("Exception updating %s's attribute %d [/n%s/n].",
+ artifact.getSafeName(), attribute.getId(), attribute.toString()), ex);
+ }
+ }
+ // Otherwise, attribute needs creation
+ // Process NEW attribute
+ else {
+ ModificationType modificationType = skynetAttributeChange.getModificationType();
+ if (modificationType == null) {
+ OseeLog.log(
+ Activator.class,
+ Level.SEVERE,
+ String.format("MOD2: Can't get mod type for %s's attribute %d.",
+ artifact.getArtifactTypeName(), skynetAttributeChange.getAttributeId()));
+ continue;
+ }
+ artifact.internalInitializeAttribute(
+ AttributeTypeManager.getType(skynetAttributeChange.getTypeId()),
+ skynetAttributeChange.getAttributeId(), skynetAttributeChange.getGammaId(),
+ modificationType, false, skynetAttributeChange.getData());
+ }
+ } catch (OseeCoreException ex) {
+ EventUtil.eventLog(
+ String.format("Exception updating %s's attribute change for attributeTypeId %d.",
+ artifact.getSafeName(), skynetAttributeChange.getTypeId()), ex);
+ }
+ }
+ }
+
+ xModifiedEvents.add(new ArtifactModifiedEvent(sender, ArtifactModType.Changed, artifact,
+ ((NetworkArtifactModifiedEvent) event).getTransactionId(),
+ ((NetworkArtifactModifiedEvent) event).getAttributeChanges()));
+
+ }
+ } else if (event instanceof NetworkArtifactDeletedEvent) {
+ int branchId = ((NetworkArtifactDeletedEvent) event).getId();
+ Artifact artifact = ArtifactCache.getActive(artId, branchId);
+ if (artifact == null) {
+ UnloadedArtifact unloadedArtifact = new UnloadedArtifact(branchId, artId, artTypeId);
+ xModifiedEvents.add(new ArtifactModifiedEvent(sender, ArtifactModType.Deleted, unloadedArtifact));
+ } else if (!artifact.isHistorical()) {
+ internalHandleRemoteArtifactDeleted(artifact);
+
+ xModifiedEvents.add(new ArtifactModifiedEvent(sender, ArtifactModType.Deleted, artifact,
+ ((NetworkArtifactDeletedEvent) event).getTransactionId(), new ArrayList<SkynetAttributeChange>()));
+ }
+ }
+ } catch (OseeCoreException ex) {
+ EventUtil.eventLog("Update Artifacts", ex);
+ }
+ }
+
+ private void updateRelations(Sender sender, ISkynetRelationLinkEvent event, Collection<ArtifactTransactionModifiedEvent> xModifiedEvents) {
+ if (event == null) {
+ return;
+ }
+
+ try {
+ RelationType relationType = RelationTypeManager.getType(event.getRelTypeId());
+ Branch branch = BranchManager.getBranch(event.getId());
+ Artifact aArtifact = ArtifactCache.getActive(event.getArtAId(), branch.getId());
+ Artifact bArtifact = ArtifactCache.getActive(event.getArtBId(), branch.getId());
+ boolean aArtifactLoaded = aArtifact != null;
+ boolean bArtifactLoaded = bArtifact != null;
+
+ if (!aArtifactLoaded && !bArtifactLoaded) {
+ if (event instanceof NetworkRelationLinkDeletedEvent) {
+ UnloadedRelation unloadedRelation =
+ new UnloadedRelation(branch.getId(), event.getArtAId(), event.getArtATypeId(), event.getArtBId(),
+ event.getArtBTypeId(), event.getRelTypeId());
+ xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.Deleted, unloadedRelation));
+ } else if (event instanceof NetworkRelationLinkRationalModifiedEvent) {
+ UnloadedRelation unloadedRelation =
+ new UnloadedRelation(branch.getId(), event.getArtAId(), event.getArtATypeId(), event.getArtBId(),
+ event.getArtBTypeId(), event.getRelTypeId());
+ xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.ModifiedRationale,
+ unloadedRelation));
+ } else if (event instanceof NetworkRelationLinkCreatedEvent) {
+ UnloadedRelation unloadedRelation =
+ new UnloadedRelation(branch.getId(), event.getArtAId(), event.getArtATypeId(), event.getArtBId(),
+ event.getArtBTypeId(), event.getRelTypeId());
+ xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.Added, unloadedRelation));
+ }
+ }
+ if (aArtifactLoaded || bArtifactLoaded) {
+ if (event instanceof NetworkRelationLinkDeletedEvent) {
+ RelationLink relation =
+ RelationManager.getLoadedRelationById(event.getRelId(), event.getArtAId(), event.getArtBId(), branch,
+ branch);
+ if (relation != null) {
+ relation.internalRemoteEventDelete();
+
+ xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.Deleted, relation,
+ relation.getBranch(), relation.getRelationType().getName()));
+ }
+ } else if (event instanceof NetworkRelationLinkCreatedEvent) {
+ RelationLink relation =
+ RelationManager.getLoadedRelationById(event.getRelId(), event.getArtAId(), event.getArtBId(), branch,
+ branch);
+
+ if (relation == null || relation.getModificationType() == ModificationType.DELETED) {
+ relation =
+ RelationLink.getOrCreate(event.getArtAId(), event.getArtBId(), branch, branch, relationType,
+ event.getRelId(), event.getGammaId(), ((NetworkRelationLinkCreatedEvent) event).getRationale(),
+ ModificationType.NEW);
+
+ xModifiedEvents.add(new RelationModifiedEvent(sender, RelationEventType.Added, relation,
+ relation.getBranch(), relation.getRelationType().getName()));
+ }
+ }
+ }
+ } catch (OseeCoreException ex) {
+ EventUtil.eventLog("Update Relations", ex);
+ }
+ }
+
+ private void internalHandleRemoteArtifactDeleted(Artifact artifact) throws OseeCoreException {
+ if (artifact == null) {
+ return;
+ } else {
+ artifact.internalSetDeletedFromRemoteEvent();
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RelationModifiedEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/RelationModifiedEvent.java index 7408d6e8282..672d337113b 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RelationModifiedEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/RelationModifiedEvent.java @@ -8,10 +8,12 @@ * Contributors: * Boeing - initial API and implementation *******************************************************************************/ -package org.eclipse.osee.framework.skynet.core.event; +package org.eclipse.osee.framework.skynet.core.event.systems; import java.util.Set; import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.skynet.core.event.ArtifactTransactionModifiedEvent; +import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact; import org.eclipse.osee.framework.skynet.core.relation.RelationEventType; import org.eclipse.osee.framework.skynet.core.relation.RelationLink; 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/event/systems/ResMessagingConnectionListener.java new file mode 100644 index 00000000000..ac504ede2a6 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/systems/ResMessagingConnectionListener.java @@ -0,0 +1,63 @@ +/*******************************************************************************
+ * 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.logging.Level;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+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.RemoteEventServiceEventType;
+import org.eclipse.osee.framework.skynet.core.event.systems.InternalEventManager2.ConnectionStatus;
+import org.eclipse.osee.framework.skynet.core.internal.Activator;
+
+/**
+ * @author Donald G. Dunne
+ */
+public final class ResMessagingConnectionListener implements ConnectionListener, ConnectionStatus {
+
+ private final EventSystemPreferences preferences;
+ private boolean connectionStatus;
+
+ public ResMessagingConnectionListener(EventSystemPreferences preferences) {
+ this.preferences = preferences;
+ }
+
+ @Override
+ public void connected(ConnectionNode node) {
+ connectionStatus = preferences.isOseeEventBrokerValid();
+ try {
+ OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem2_Connected);
+ OseeLog.log(Activator.class, Level.INFO, "RES2 Connected");
+ } catch (OseeCoreException ex) {
+ EventUtil.eventLog("REM2: ResConnectionListener", ex);
+ }
+ }
+
+ @Override
+ public void notConnected(ConnectionNode node) {
+ connectionStatus = false;
+ try {
+ OseeEventManager.kickLocalRemEvent(this, RemoteEventServiceEventType.Rem2_DisConnected);
+ OseeLog.log(Activator.class, Level.INFO, "RES2 Dis-Connected");
+ } catch (OseeCoreException ex) {
+ EventUtil.eventLog("REM2: 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/event2/ArtifactEvent.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event2/ArtifactEvent.java index 9aef70cd029..232ebd8f03e 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event2/ArtifactEvent.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event2/ArtifactEvent.java @@ -25,7 +25,6 @@ import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidRelationReord import org.eclipse.osee.framework.core.model.event.IBasicGuidArtifact; import org.eclipse.osee.framework.jdk.core.util.Collections; import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.messaging.event.res.Activator; import org.eclipse.osee.framework.messaging.event.skynet.event.NetworkSender; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCache; @@ -36,6 +35,7 @@ import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidRela import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType; import org.eclipse.osee.framework.skynet.core.event2.filter.BranchGuidEventFilter; import org.eclipse.osee.framework.skynet.core.event2.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 { diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/httpRequests/ClientDashboardRequestHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/httpRequests/ClientDashboardRequestHandler.java index 3bd896bb5dc..4b81c73a004 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/httpRequests/ClientDashboardRequestHandler.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/httpRequests/ClientDashboardRequestHandler.java @@ -33,7 +33,6 @@ import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.plugin.core.util.OseeData; import org.eclipse.osee.framework.skynet.core.UserManager; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; -import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager; import org.eclipse.osee.framework.skynet.core.internal.Activator; /** @@ -94,10 +93,10 @@ public class ClientDashboardRequestHandler implements IHttpServerRequest { for (IHealthStatus status : OseeLog.getStatus()) { sb.append("\n" + status.getSourceName() + ": [" + status.getMessage() + "]"); } - sb.append("\nRemote Event Service - Old Connected: [" + RemoteEventManager.isConnected() + "]"); - sb.append("\nRemote Event Service - Old Active: [" + OseeEventManager.isOldEvents() + "]"); - sb.append("\nRemote Event Service - New Connected: [" + RemoteEventManager.isConnected() + "]"); - sb.append("\nRemote Event Service - New Active: [" + OseeEventManager.isNewEvents() + "]"); + sb.append("\nRemote Event Service - Old Connected: [" + OseeEventManager.isLegacyEventManagerConnected() + "]"); + sb.append("\nRemote Event Service - Old Active: [" + OseeEventManager.getPreferences().isOldEvents() + "]"); + sb.append("\nRemote Event Service - New Connected: [" + OseeEventManager.isEventManagerConnected() + "]"); + sb.append("\nRemote Event Service - New Active: [" + OseeEventManager.getPreferences().isNewEvents() + "]"); return sb.toString(); } 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 daeeea35377..69653fa0fbe 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,73 +11,59 @@ package org.eclipse.osee.framework.skynet.core.internal; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.logging.Level; import org.eclipse.core.runtime.Platform; import org.eclipse.osee.framework.core.client.ClientSessionManager; import org.eclipse.osee.framework.core.enums.OseeServiceTrackerId; -import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.TransactionRecordFactory; import org.eclipse.osee.framework.core.services.IAccessControlService; import org.eclipse.osee.framework.core.services.IOseeCachingService; import org.eclipse.osee.framework.core.services.IOseeModelFactoryService; -import org.eclipse.osee.framework.core.services.IOseeModelFactoryServiceProvider; import org.eclipse.osee.framework.core.translation.IDataTranslationService; -import org.eclipse.osee.framework.core.util.AbstractTrackingHandler; import org.eclipse.osee.framework.core.util.ServiceDependencyTracker; import org.eclipse.osee.framework.database.IOseeDatabaseService; import org.eclipse.osee.framework.database.IOseeDatabaseServiceProvider; import org.eclipse.osee.framework.lifecycle.ILifecycleService; import org.eclipse.osee.framework.lifecycle.ILifecycleServiceProvider; import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.plugin.core.IWorkbenchUserService; -import org.eclipse.osee.framework.skynet.core.WorkbenchUserService; -import org.eclipse.osee.framework.skynet.core.attribute.HttpAttributeTagger; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; -import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager2; -import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransactionAccessHandler; -import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransactionCheckPoint; -import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransactionHandler; +import org.eclipse.osee.framework.skynet.core.event.systems.EventManagerData; import org.osgi.framework.Bundle; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; -import org.osgi.framework.ServiceRegistration; import org.osgi.util.tracker.ServiceTracker; /** * @author Ryan D. Brooks */ -public class Activator implements BundleActivator, IOseeModelFactoryServiceProvider, IOseeDatabaseServiceProvider, ILifecycleServiceProvider { +public class Activator implements BundleActivator, IOseeDatabaseServiceProvider, ILifecycleServiceProvider { public static final String PLUGIN_ID = "org.eclipse.osee.framework.skynet.core"; private static Activator instance; private final Map<OseeServiceTrackerId, ServiceTracker> mappedTrackers; - private final List<ServiceRegistration> services; - private BundleContext context; - private ServiceDependencyTracker dependencyTracker; + private final Collection<ServiceDependencyTracker> trackers = new ArrayList<ServiceDependencyTracker>(); public Activator() { this.mappedTrackers = new HashMap<OseeServiceTrackerId, ServiceTracker>(); - this.services = new ArrayList<ServiceRegistration>(); - } - - public Bundle getBundle() { - return instance.context.getBundle(); } @Override public void start(BundleContext context) throws Exception { instance = this; - this.context = context; - ClientSessionManager.class.getCanonicalName(); - HttpAttributeTagger.getInstance(); - IOseeCachingService cachingService = new ClientCachingServiceFactory().createService(this); + trackers.add(new ServiceDependencyTracker(context, new SkynetTransactionAccessServiceHandler())); + trackers.add(new ServiceDependencyTracker(context, new ClientCachingServiceRegHandler())); + trackers.add(new ServiceDependencyTracker(context, new ClientWorkbenchUserRegHandler())); - createService(context, IOseeCachingService.class, cachingService); - createService(context, IWorkbenchUserService.class, new WorkbenchUserService()); + EventManagerData eventManagerData = new EventManagerData(); + OseeEventManager.setEventManagerData(eventManagerData); + trackers.add(new ServiceDependencyTracker(context, new OseeEventSystemServiceRegHandler(eventManagerData))); + + ClientSessionManager.class.getCanonicalName(); createServiceTracker(context, IOseeCachingService.class, OseeServiceTrackerId.OSEE_CACHING_SERVICE); createServiceTracker(context, IDataTranslationService.class, OseeServiceTrackerId.TRANSLATION_SERVICE); @@ -86,32 +72,21 @@ public class Activator implements BundleActivator, IOseeModelFactoryServiceProvi createServiceTracker(context, ILifecycleService.class, OseeServiceTrackerId.LIFECYCLE_SERVER); createServiceTracker(context, IAccessControlService.class, OseeServiceTrackerId.OSEE_ACCESS_CONTROL_SERVICE); - dependencyTracker = new ServiceDependencyTracker(context, new TrackingHandler()); - dependencyTracker.open(); - - RemoteEventManager2.getInstance().registerForRemoteEvents(); - if (!OseeEventManager.isNewEvents() && !OseeEventManager.isOldEvents()) { - OseeLog.log(Activator.class, Level.SEVERE, "Neither Event System Enabled - This is a problem."); + for (ServiceDependencyTracker dependencyTracker : trackers) { + dependencyTracker.open(); } } @Override public void stop(BundleContext context) throws Exception { - HttpAttributeTagger.getInstance().deregisterFromEventManager(); - // RemoteEventManager.deregisterFromRemoteEventManager(); - - if (dependencyTracker != null) { + for (ServiceDependencyTracker dependencyTracker : trackers) { dependencyTracker.close(); } - - for (ServiceRegistration service : services) { - service.unregister(); - } + trackers.clear(); for (ServiceTracker tracker : mappedTrackers.values()) { tracker.close(); } - services.clear(); mappedTrackers.clear(); instance = null; @@ -129,13 +104,10 @@ public class Activator implements BundleActivator, IOseeModelFactoryServiceProvi return getTracker(OseeServiceTrackerId.TRANSLATION_SERVICE, IDataTranslationService.class); } - @Override - public IOseeModelFactoryService getOseeFactoryService() { - return getTracker(OseeServiceTrackerId.OSEE_FACTORY_SERVICE, IOseeModelFactoryService.class); - } - - private void createService(BundleContext context, Class<?> serviceInterface, Object serviceImplementation) { - services.add(context.registerService(serviceInterface.getName(), serviceImplementation, null)); + public TransactionRecordFactory getTransactionFactory() { + IOseeModelFactoryService service = + getTracker(OseeServiceTrackerId.OSEE_FACTORY_SERVICE, IOseeModelFactoryService.class); + return service != null ? service.getTransactionFactory() : null; } private void createServiceTracker(BundleContext context, Class<?> clazz, OseeServiceTrackerId trackerId) { @@ -171,41 +143,4 @@ public class Activator implements BundleActivator, IOseeModelFactoryServiceProvi } return getTracker(OseeServiceTrackerId.OSEE_ACCESS_CONTROL_SERVICE, IAccessControlService.class); } - - private static final class TrackingHandler extends AbstractTrackingHandler { - - private static final Class<?>[] DEPENDENCIES = new Class[] {ILifecycleService.class, IAccessControlService.class}; - - private SkynetTransactionHandler handler; - private ILifecycleService lifecycleService; - private IAccessControlService accessService; - - @Override - public Class<?>[] getDependencies() { - return DEPENDENCIES; - } - - @Override - public void onActivate(BundleContext context, Map<Class<?>, Object> services) { - lifecycleService = (ILifecycleService) services.get(ILifecycleService.class); - accessService = (IAccessControlService) services.get(IAccessControlService.class); - try { - handler = new SkynetTransactionAccessHandler(accessService); - lifecycleService.addHandler(SkynetTransactionCheckPoint.TYPE, handler); - } catch (OseeCoreException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - - @Override - public void onDeActivate() { - if (handler != null) { - try { - lifecycleService.removeHandler(SkynetTransactionCheckPoint.TYPE, handler); - } catch (OseeCoreException ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } - } - } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ClientCachingServiceFactory.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ClientCachingServiceRegHandler.java index 888a18d2901..d6cb9f296cf 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ClientCachingServiceFactory.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ClientCachingServiceRegHandler.java @@ -10,7 +10,9 @@ *******************************************************************************/ package org.eclipse.osee.framework.skynet.core.internal; +import java.util.Map; import org.eclipse.osee.framework.core.model.OseeCachingService; +import org.eclipse.osee.framework.core.model.TransactionRecordFactory; import org.eclipse.osee.framework.core.model.cache.ArtifactTypeCache; import org.eclipse.osee.framework.core.model.cache.AttributeTypeCache; import org.eclipse.osee.framework.core.model.cache.BranchCache; @@ -18,35 +20,68 @@ import org.eclipse.osee.framework.core.model.cache.OseeEnumTypeCache; import org.eclipse.osee.framework.core.model.cache.RelationTypeCache; import org.eclipse.osee.framework.core.model.cache.TransactionCache; import org.eclipse.osee.framework.core.services.IOseeCachingService; -import org.eclipse.osee.framework.core.services.IOseeModelFactoryServiceProvider; +import org.eclipse.osee.framework.core.services.IOseeModelFactoryService; +import org.eclipse.osee.framework.core.util.AbstractTrackingHandler; import org.eclipse.osee.framework.skynet.core.internal.accessors.ClientArtifactTypeAccessor; import org.eclipse.osee.framework.skynet.core.internal.accessors.ClientAttributeTypeAccessor; import org.eclipse.osee.framework.skynet.core.internal.accessors.ClientBranchAccessor; import org.eclipse.osee.framework.skynet.core.internal.accessors.ClientOseeEnumTypeAccessor; import org.eclipse.osee.framework.skynet.core.internal.accessors.ClientRelationTypeAccessor; import org.eclipse.osee.framework.skynet.core.internal.accessors.ClientTransactionAccessor; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; /** * @author Roberto E. Escobar */ -public class ClientCachingServiceFactory { +public class ClientCachingServiceRegHandler extends AbstractTrackingHandler { - public IOseeCachingService createService(IOseeModelFactoryServiceProvider factoryProvider) { + private static final Class<?>[] DEPENDENCIES = new Class<?>[] {IOseeModelFactoryService.class}; + + private ServiceRegistration serviceRegistration; + + @Override + public Class<?>[] getDependencies() { + return DEPENDENCIES; + } + + @Override + public void onActivate(BundleContext context, Map<Class<?>, Object> services) { + IOseeModelFactoryService modelFactory = getService(IOseeModelFactoryService.class, services); + IOseeCachingService cachingService = createService(modelFactory); + + serviceRegistration = context.registerService(IOseeCachingService.class.getName(), cachingService, null); + } + + @Override + public void onDeActivate() { + if (serviceRegistration != null) { + serviceRegistration.unregister(); + } + } + + private IOseeCachingService createService(IOseeModelFactoryService factory) { TransactionCache transactionCache = new TransactionCache(); - ClientBranchAccessor clientBranchAccessor = new ClientBranchAccessor(factoryProvider, transactionCache); + ClientBranchAccessor clientBranchAccessor = + new ClientBranchAccessor(factory.getBranchFactory(), transactionCache); BranchCache branchCache = new BranchCache(clientBranchAccessor); clientBranchAccessor.setBranchCache(branchCache); - transactionCache.setAccessor(new ClientTransactionAccessor(factoryProvider, branchCache)); - OseeEnumTypeCache oseeEnumTypeCache = new OseeEnumTypeCache(new ClientOseeEnumTypeAccessor(factoryProvider)); + + TransactionRecordFactory txFactory = factory.getTransactionFactory(); + + transactionCache.setAccessor(new ClientTransactionAccessor(txFactory, branchCache)); + OseeEnumTypeCache oseeEnumTypeCache = + new OseeEnumTypeCache(new ClientOseeEnumTypeAccessor(factory.getOseeEnumTypeFactory())); AttributeTypeCache attributeTypeCache = - new AttributeTypeCache(new ClientAttributeTypeAccessor(factoryProvider, oseeEnumTypeCache)); + new AttributeTypeCache(new ClientAttributeTypeAccessor(factory.getAttributeTypeFactory(), oseeEnumTypeCache)); ArtifactTypeCache artifactTypeCache = - new ArtifactTypeCache(new ClientArtifactTypeAccessor(factoryProvider, attributeTypeCache, branchCache)); + new ArtifactTypeCache(new ClientArtifactTypeAccessor(factory.getArtifactTypeFactory(), attributeTypeCache, + branchCache)); RelationTypeCache relationTypeCache = - new RelationTypeCache(new ClientRelationTypeAccessor(factoryProvider, artifactTypeCache)); + new RelationTypeCache(new ClientRelationTypeAccessor(factory.getRelationTypeFactory(), artifactTypeCache)); return new OseeCachingService(branchCache, transactionCache, artifactTypeCache, attributeTypeCache, relationTypeCache, oseeEnumTypeCache); diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ClientWorkbenchUserRegHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ClientWorkbenchUserRegHandler.java new file mode 100644 index 00000000000..6d573e10c11 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/ClientWorkbenchUserRegHandler.java @@ -0,0 +1,40 @@ +/* + * Created on Aug 19, 2010 + * + * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE + */ +package org.eclipse.osee.framework.skynet.core.internal; + +import java.util.Map; +import org.eclipse.osee.framework.core.services.IOseeCachingService; +import org.eclipse.osee.framework.core.util.AbstractTrackingHandler; +import org.eclipse.osee.framework.plugin.core.IWorkbenchUserService; +import org.eclipse.osee.framework.skynet.core.WorkbenchUserService; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +public class ClientWorkbenchUserRegHandler extends AbstractTrackingHandler { + + private static final Class<?>[] DEPENDENCIES = new Class<?>[] {IOseeCachingService.class}; + + private ServiceRegistration serviceRegistration; + + @Override + public Class<?>[] getDependencies() { + return DEPENDENCIES; + } + + @Override + public void onActivate(BundleContext context, Map<Class<?>, Object> services) { + serviceRegistration = + context.registerService(IWorkbenchUserService.class.getName(), new WorkbenchUserService(), null); + } + + @Override + public void onDeActivate() { + if (serviceRegistration != null) { + serviceRegistration.unregister(); + } + } + +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventSystemServiceRegHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventSystemServiceRegHandler.java new file mode 100644 index 00000000000..60a0d381f8d --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/OseeEventSystemServiceRegHandler.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * 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.Map; +import java.util.logging.Level; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.services.IOseeCachingService; +import org.eclipse.osee.framework.core.util.AbstractTrackingHandler; +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.IEventListener; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; +import org.eclipse.osee.framework.skynet.core.event.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.InternalEventManager2; +import org.eclipse.osee.framework.skynet.core.event.systems.LegacyEventManager; +import org.eclipse.osee.framework.skynet.core.event.systems.ResMessagingConnectionListener; +import org.osgi.framework.BundleContext; + +/** + * @author Roberto E. Escobar + */ +public class OseeEventSystemServiceRegHandler extends AbstractTrackingHandler { + + private static final Class<?>[] DEPENDENCIES = new Class<?>[] {IOseeCachingService.class, + IOseeCoreModelEventService.class}; + + @Override + public Class<?>[] getDependencies() { + return DEPENDENCIES; + } + + private final EventManagerData eventManagerData; + + private ResMessagingConnectionListener connectionStatusListener; + private IOseeCoreModelEventService coreModelEventService; + private final Collection<IEventListener> coreListeners = new ArrayList<IEventListener>(); + + public OseeEventSystemServiceRegHandler(EventManagerData eventManagerData) { + this.eventManagerData = eventManagerData; + } + + @Override + public void onActivate(BundleContext context, Map<Class<?>, Object> services) { + coreModelEventService = getService(IOseeCoreModelEventService.class, services); + + EventManagerFactory factory = new EventManagerFactory(); + + LegacyEventManager legacyEventManager = null; + InternalEventManager2 eventManager = null; + if (eventManagerData.getPreferences().isOldEvents()) { + legacyEventManager = + factory.createLegacyEventManager(eventManagerData.getPreferences(), eventManagerData.getListeners(), + eventManagerData.getPriorityListeners()); + } else if (eventManagerData.getPreferences().isNewEvents()) { + connectionStatusListener = new ResMessagingConnectionListener(eventManagerData.getPreferences()); + eventManager = + factory.createNewEventManager(coreModelEventService, eventManagerData.getPreferences(), + eventManagerData.getListeners(), eventManagerData.getPriorityListeners(), connectionStatusListener); + } + + if (legacyEventManager == null && eventManager == null) { + OseeLog.log(Activator.class, Level.SEVERE, "Neither Event System Enabled - This is a problem."); + } else { + if (eventManager != null) { + eventManagerData.setMessageEventManager(eventManager); + coreModelEventService.addConnectionListener(connectionStatusListener); + eventManager.start(); + try { + OseeEventManager.kickLocalRemEvent(eventManager, RemoteEventServiceEventType.Rem2_Connected); + } catch (OseeCoreException ex) { + OseeLog.log(Activator.class, Level.INFO, ex); + } + OseeLog.log(Activator.class, Level.INFO, "REM2: Enabled"); + } else { + OseeLog.log(Activator.class, Level.INFO, "REM2: Disabled"); + } + + if (legacyEventManager != null) { + eventManagerData.setLegacyEventManager(legacyEventManager); + legacyEventManager.start(); + OseeLog.log(Activator.class, Level.INFO, "REM1 Enabled"); + } else { + OseeLog.log(Activator.class, Level.INFO, "REM1 Disabled"); + } + addCoreListeners(); + } + } + + 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(); + } + + @Override + public void onDeActivate() { + removeCoreListeners(); + + InternalEventManager2 eventManager = eventManagerData.getMessageEventManager(); + if (eventManager != null) { + coreModelEventService.removeConnectionListener(connectionStatusListener); + eventManager.stop(); + // OseeEventManager.kickLocalRemEvent(eventManager, RemoteEventServiceEventType.Rem2_DisConnected); + eventManagerData.setMessageEventManager(null); + } + LegacyEventManager legacyEventManager = eventManagerData.getLegacyEventManager(); + if (legacyEventManager != null) { + legacyEventManager.stop(); + eventManagerData.setLegacyEventManager(null); + } + } +} diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/SkynetTransactionAccessServiceHandler.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/SkynetTransactionAccessServiceHandler.java new file mode 100644 index 00000000000..464a6bddb49 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/internal/SkynetTransactionAccessServiceHandler.java @@ -0,0 +1,65 @@ +/*******************************************************************************
+ * 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.Map;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.services.IAccessControlService;
+import org.eclipse.osee.framework.core.util.AbstractTrackingHandler;
+import org.eclipse.osee.framework.lifecycle.ILifecycleService;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransactionAccessHandler;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransactionCheckPoint;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransactionHandler;
+import org.osgi.framework.BundleContext;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public final class SkynetTransactionAccessServiceHandler extends AbstractTrackingHandler {
+
+ private static final Class<?>[] DEPENDENCIES = new Class[] {//
+ ILifecycleService.class, //
+ IAccessControlService.class,//
+ };
+
+ private SkynetTransactionHandler handler;
+ private ILifecycleService lifecycleService;
+
+ @Override
+ public Class<?>[] getDependencies() {
+ return DEPENDENCIES;
+ }
+
+ @Override
+ public void onActivate(BundleContext context, Map<Class<?>, Object> services) {
+ IAccessControlService accessService = getService(IAccessControlService.class, services);
+ lifecycleService = getService(ILifecycleService.class, services);
+ try {
+ handler = new SkynetTransactionAccessHandler(accessService);
+ lifecycleService.addHandler(SkynetTransactionCheckPoint.TYPE, handler);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+
+ @Override
+ public void onDeActivate() {
+ if (handler != null) {
+ try {
+ lifecycleService.removeHandler(SkynetTransactionCheckPoint.TYPE, handler);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+ }
+}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/relation/RelationTransactionData.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/relation/RelationTransactionData.java index 6911f4240fa..6761765dfc2 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/relation/RelationTransactionData.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/relation/RelationTransactionData.java @@ -16,8 +16,8 @@ import org.eclipse.osee.framework.core.model.TransactionRecord; import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidRelation; import org.eclipse.osee.framework.database.core.ConnectionHandler; import org.eclipse.osee.framework.database.core.OseeSql; -import org.eclipse.osee.framework.skynet.core.event.RelationModifiedEvent; import org.eclipse.osee.framework.skynet.core.event.Sender; +import org.eclipse.osee.framework.skynet.core.event.systems.RelationModifiedEvent; import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidRelation; import org.eclipse.osee.framework.skynet.core.transaction.BaseTransactionData; diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/transaction/StoreSkynetTransactionOperation.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/transaction/StoreSkynetTransactionOperation.java index c70cd3b6184..424e47f1333 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/transaction/StoreSkynetTransactionOperation.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/transaction/StoreSkynetTransactionOperation.java @@ -37,9 +37,9 @@ import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.skynet.core.artifact.ArtifactModType;
import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
-import org.eclipse.osee.framework.skynet.core.event.ArtifactModifiedEvent;
import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.event.systems.ArtifactModifiedEvent;
import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent;
import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModifiedBasicGuidArtifact;
import org.eclipse.osee.framework.skynet.core.internal.Activator;
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerEventManager.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerEventManager.java index 0abde11f1b7..6a4946a6677 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerEventManager.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerEventManager.java @@ -8,121 +8,122 @@ * Contributors: * Boeing - initial API and implementation *******************************************************************************/ -package org.eclipse.osee.framework.ui.skynet;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.logging.Level;
-import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact;
-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.OseeEventManager;
-import org.eclipse.osee.framework.skynet.core.event.Sender;
-import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType;
-import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener;
-import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
-import org.eclipse.osee.framework.ui.swt.Displays;
-
-/**
- * Common location for event handling for ArtifactExplorers in order to keep number of registrations and processing to a
- * minimum.
- *
- * @author Donald G. Dunne
- */
-public class ArtifactExplorerEventManager implements IArtifactEventListener {
-
- List<IArtifactExplorerEventHandler> handlers = new ArrayList<IArtifactExplorerEventHandler>();
- static ArtifactExplorerEventManager instance;
-
- public static void add(IArtifactExplorerEventHandler iWorldEventHandler) {
- if (instance == null) {
- instance = new ArtifactExplorerEventManager();
- OseeEventManager.addListener(instance);
- }
- instance.handlers.add(iWorldEventHandler);
- }
-
- public static void remove(IArtifactExplorerEventHandler iWorldEventHandler) {
- if (instance != null) {
- instance.handlers.remove(iWorldEventHandler);
- }
- }
-
- @Override
- public List<? extends IEventFilter> getEventFilters() {
- // Can't filter cause this class handles all artifact explorers which can care about different branches
- return null;
- }
-
- @Override
- public void handleArtifactEvent(final ArtifactEvent artifactEvent, Sender sender) {
- for (IArtifactExplorerEventHandler handler : new CopyOnWriteArrayList<IArtifactExplorerEventHandler>(handlers)) {
- if (handler.isDisposed()) {
- handlers.remove(handler);
- }
- }
- OseeEventManager.eventLog("ArtifacExplorer: handleArtifactEvent called [" + artifactEvent + "] - sender " + sender + "");
- final Collection<Artifact> modifiedArts =
- artifactEvent.getCacheArtifacts(EventModType.Modified, EventModType.Reloaded);
- final Collection<Artifact> relModifiedArts = artifactEvent.getRelCacheArtifacts();
- final Collection<EventBasicGuidArtifact> deletedPurgedArts =
- artifactEvent.get(EventModType.Deleted, EventModType.Purged);
- final Collection<DefaultBasicGuidArtifact> relOrderChangedArtifacts = artifactEvent.getRelOrderChangedArtifacts();
-
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- if (!deletedPurgedArts.isEmpty()) {
- for (IArtifactExplorerEventHandler handler : handlers) {
- if (!handler.isDisposed()) {
- handler.getArtifactExplorer().getTreeViewer().remove(
- deletedPurgedArts.toArray(new Object[deletedPurgedArts.size()]));
- }
- }
- }
- for (IArtifactExplorerEventHandler handler : handlers) {
- if (!handler.isDisposed()) {
- for (Artifact artifact : modifiedArts) {
- // Don't refresh deleted artifacts
- if (artifact.isDeleted()) {
- continue;
- }
- handler.getArtifactExplorer().getTreeViewer().update(artifact, null);
- }
-
- for (Artifact art : relModifiedArts) {
- try {
- // Don't refresh deleted artifacts
- if (art.isDeleted()) {
- continue;
- }
- handler.getArtifactExplorer().getTreeViewer().refresh(art);
- if (art.getParent() != null) {
- handler.getArtifactExplorer().getTreeViewer().refresh(art.getParent());
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
-
- for (DefaultBasicGuidArtifact guidArt : relOrderChangedArtifacts) {
- try {
- Artifact artifact = ArtifactCache.getActive(guidArt);
- if (artifact != null) {
- handler.getArtifactExplorer().getTreeViewer().refresh(artifact);
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- }
- }
- }
- });
- }
-}
+package org.eclipse.osee.framework.ui.skynet; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.logging.Level; +import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; +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.Sender; +import org.eclipse.osee.framework.skynet.core.event2.ArtifactEvent; +import org.eclipse.osee.framework.skynet.core.event2.artifact.EventBasicGuidArtifact; +import org.eclipse.osee.framework.skynet.core.event2.artifact.EventModType; +import org.eclipse.osee.framework.skynet.core.event2.artifact.IArtifactEventListener; +import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter; +import org.eclipse.osee.framework.ui.swt.Displays; + +/** + * Common location for event handling for ArtifactExplorers in order to keep number of registrations and processing to a + * minimum. + * + * @author Donald G. Dunne + */ +public class ArtifactExplorerEventManager implements IArtifactEventListener { + + List<IArtifactExplorerEventHandler> handlers = new ArrayList<IArtifactExplorerEventHandler>(); + static ArtifactExplorerEventManager instance; + + public static void add(IArtifactExplorerEventHandler iWorldEventHandler) { + if (instance == null) { + instance = new ArtifactExplorerEventManager(); + OseeEventManager.addListener(instance); + } + instance.handlers.add(iWorldEventHandler); + } + + public static void remove(IArtifactExplorerEventHandler iWorldEventHandler) { + if (instance != null) { + instance.handlers.remove(iWorldEventHandler); + } + } + + @Override + public List<? extends IEventFilter> getEventFilters() { + // Can't filter cause this class handles all artifact explorers which can care about different branches + return null; + } + + @Override + public void handleArtifactEvent(final ArtifactEvent artifactEvent, Sender sender) { + for (IArtifactExplorerEventHandler handler : new CopyOnWriteArrayList<IArtifactExplorerEventHandler>(handlers)) { + if (handler.isDisposed()) { + handlers.remove(handler); + } + } + EventUtil.eventLog("ArtifacExplorer: handleArtifactEvent called [" + artifactEvent + "] - sender " + sender + ""); + final Collection<Artifact> modifiedArts = + artifactEvent.getCacheArtifacts(EventModType.Modified, EventModType.Reloaded); + final Collection<Artifact> relModifiedArts = artifactEvent.getRelCacheArtifacts(); + final Collection<EventBasicGuidArtifact> deletedPurgedArts = + artifactEvent.get(EventModType.Deleted, EventModType.Purged); + final Collection<DefaultBasicGuidArtifact> relOrderChangedArtifacts = artifactEvent.getRelOrderChangedArtifacts(); + + Displays.ensureInDisplayThread(new Runnable() { + @Override + public void run() { + if (!deletedPurgedArts.isEmpty()) { + for (IArtifactExplorerEventHandler handler : handlers) { + if (!handler.isDisposed()) { + handler.getArtifactExplorer().getTreeViewer().remove( + deletedPurgedArts.toArray(new Object[deletedPurgedArts.size()])); + } + } + } + for (IArtifactExplorerEventHandler handler : handlers) { + if (!handler.isDisposed()) { + for (Artifact artifact : modifiedArts) { + // Don't refresh deleted artifacts + if (artifact.isDeleted()) { + continue; + } + handler.getArtifactExplorer().getTreeViewer().update(artifact, null); + } + + for (Artifact art : relModifiedArts) { + try { + // Don't refresh deleted artifacts + if (art.isDeleted()) { + continue; + } + handler.getArtifactExplorer().getTreeViewer().refresh(art); + if (art.getParent() != null) { + handler.getArtifactExplorer().getTreeViewer().refresh(art.getParent()); + } + } catch (Exception ex) { + OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex); + } + } + + for (DefaultBasicGuidArtifact guidArt : relOrderChangedArtifacts) { + try { + Artifact artifact = ArtifactCache.getActive(guidArt); + if (artifact != null) { + handler.getArtifactExplorer().getTreeViewer().refresh(artifact); + } + } catch (Exception ex) { + OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex); + } + } + } + } + } + }); + } +} diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeContributionItem.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeContributionItem.java index 82183529805..fe8820a299e 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeContributionItem.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/OseeContributionItem.java @@ -11,7 +11,7 @@ package org.eclipse.osee.framework.ui.skynet; import org.eclipse.jface.action.IStatusLineManager; -import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager2; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.ui.skynet.ats.IOseeAtsService; import org.eclipse.osee.framework.ui.skynet.ats.OseeAts; import org.eclipse.osee.framework.ui.swt.Displays; @@ -66,7 +66,7 @@ public abstract class OseeContributionItem extends StatusLineContributionItem { if (atsService != null && atsService.isAtsAdmin()) { AdminContributionItem.addTo(manager); } - if (!RemoteEventManager2.isConnected()) { + if (!OseeEventManager.isEventManagerConnected()) { SkynetServiceContributionItem.addTo(manager); } OseeServicesStatusContributionItem.addTo(manager); diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ResServiceContributionItem.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ResServiceContributionItem.java index 3beede0aa56..c46f2c2bc64 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ResServiceContributionItem.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ResServiceContributionItem.java @@ -15,7 +15,6 @@ import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.osee.framework.skynet.core.event.IRemoteEventManagerEventListener; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; -import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager2; import org.eclipse.osee.framework.skynet.core.event.RemoteEventServiceEventType; import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.ui.skynet.OseeBuildTypeContributionItem.OpenConfigDetailsAction; @@ -42,8 +41,7 @@ public class ResServiceContributionItem extends OseeContributionItem implements @Override public void run() { do { - RemoteEventManager2.getInstance(); - boolean status = RemoteEventManager2.isConnected(); + boolean status = OseeEventManager.isEventManagerConnected(); for (ResServiceContributionItem icon : icons) { icon.updateStatus(status); } @@ -58,7 +56,7 @@ public class ResServiceContributionItem extends OseeContributionItem implements public ResServiceContributionItem() { super(ID); - updateStatus(RemoteEventManager2.isConnected()); + updateStatus(OseeEventManager.isEventManagerConnected()); OseeEventManager.addListener(this); setActionHandler(new OpenConfigDetailsAction()); icons.add(this); @@ -97,7 +95,7 @@ public class ResServiceContributionItem extends OseeContributionItem implements Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { - updateStatus(RemoteEventManager2.isConnected()); + updateStatus(OseeEventManager.isEventManagerConnected()); } }); } diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetServiceContributionItem.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetServiceContributionItem.java index 1c6a61c9f26..ca432ca7bc0 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetServiceContributionItem.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/SkynetServiceContributionItem.java @@ -15,7 +15,6 @@ import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.osee.framework.skynet.core.event.IRemoteEventManagerEventListener; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; -import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager; import org.eclipse.osee.framework.skynet.core.event.RemoteEventServiceEventType; import org.eclipse.osee.framework.skynet.core.event.Sender; import org.eclipse.osee.framework.ui.swt.Displays; @@ -42,7 +41,7 @@ public class SkynetServiceContributionItem extends OseeContributionItem implemen @Override public void run() { do { - boolean status = RemoteEventManager.isConnected(); + boolean status = OseeEventManager.isLegacyEventManagerConnected(); for (SkynetServiceContributionItem icon : icons) { icon.updateStatus(status); } @@ -57,7 +56,7 @@ public class SkynetServiceContributionItem extends OseeContributionItem implemen public SkynetServiceContributionItem() { super(ID); - updateStatus(RemoteEventManager.isConnected()); + updateStatus(OseeEventManager.isLegacyEventManagerConnected()); OseeEventManager.addListener(this); icons.add(this); createUpdateThread(); diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/AbstractEventArtifactEditor.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/AbstractEventArtifactEditor.java index 14d4daee697..664d03a1967 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/AbstractEventArtifactEditor.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/AbstractEventArtifactEditor.java @@ -43,7 +43,7 @@ public abstract class AbstractEventArtifactEditor extends AbstractArtifactEditor public AbstractEventArtifactEditor() {
super();
- if (OseeEventManager.isOldEvents()) {
+ if (OseeEventManager.getPreferences().isOldEvents()) {
internalEventHandler = new InternalEventHandler();
OseeEventManager.addListener(internalEventHandler);
} else {
@@ -88,7 +88,7 @@ public abstract class AbstractEventArtifactEditor extends AbstractArtifactEditor @Override
public void dispose() {
super.dispose();
- if (OseeEventManager.isOldEvents()) {
+ if (OseeEventManager.getPreferences().isOldEvents()) {
OseeEventManager.removeListener(internalEventHandler);
}
}
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorEventManager.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorEventManager.java index abfe1fae342..b7a6d6adbfe 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorEventManager.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/editor/ArtifactEditorEventManager.java @@ -18,6 +18,7 @@ import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.event.AccessControlEventType; import org.eclipse.osee.framework.skynet.core.event.BranchEventType; +import org.eclipse.osee.framework.skynet.core.event.EventUtil; import org.eclipse.osee.framework.skynet.core.event.IAccessControlEventListener; import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; @@ -70,7 +71,7 @@ public class ArtifactEditorEventManager implements IArtifactEventListener, IBran handlers.remove(handler); } } - OseeEventManager.eventLog("ArtifactEditorEventManager: handleArtifactEvent called [" + artifactEvent + "] - sender " + sender + ""); + EventUtil.eventLog("ArtifactEditorEventManager: handleArtifactEvent called [" + artifactEvent + "] - sender " + sender + ""); final Collection<Artifact> modifiedArts = artifactEvent.getCacheArtifacts(EventModType.Modified, EventModType.Reloaded); final Collection<Artifact> relModifiedArts = artifactEvent.getRelCacheArtifacts(); diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ConfigurationDetails.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ConfigurationDetails.java index 2203227bd85..31606bce758 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ConfigurationDetails.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/preferences/ConfigurationDetails.java @@ -17,8 +17,7 @@ import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.jdk.core.util.AHTML; import org.eclipse.osee.framework.logging.IHealthStatus; import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager; -import org.eclipse.osee.framework.skynet.core.event.RemoteEventManager2; +import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin; import org.eclipse.osee.framework.ui.swt.Displays; import org.eclipse.swt.SWT; @@ -112,16 +111,29 @@ public class ConfigurationDetails extends PreferencePage implements IWorkbenchPr status.getMessage().replaceAll("]", "]<br/>"), status.isOk() ? "<font color=\"green\"><b>Ok</b></font>" : "<font color=\"red\"><b>Unavailable</b></font>")); } + builder.append(AHTML.addRowMultiColumnTable( "<b>Remote Event Service</b>", - RemoteEventManager2.getInstance().getConnectionProperties().replaceAll("]", "]<br/>"), - RemoteEventManager2.isConnected() ? "<font color=\"green\"><b>Ok</b></font>" : "<font color=\"red\"><b>Unavailable - " + RemoteEventManager2.getInstance().getConnectionInfo() + "</b></font>")); + OseeEventManager.getConnectionDetails().replaceAll("]", "]<br/>"), + OseeEventManager.isEventManagerConnected() ? "<font color=\"green\"><b>Ok</b></font>" : "<font color=\"red\"><b>Unavailable - " + getEventServiceDetails() + "</b></font>")); builder.append(AHTML.addRowMultiColumnTable( "<b>Old Remote Event Service</b>", - RemoteEventManager.getConnectionProperties().replaceAll("]", "]<br/>"), - RemoteEventManager.isConnected() ? "<font color=\"green\"><b>Ok</b></font>" : "<font color=\"red\"><b>Unavailable</b></font>")); + OseeEventManager.getLegacyConnectionDetails().replaceAll("]", "]<br/>"), + OseeEventManager.isLegacyEventManagerConnected() ? "<font color=\"green\"><b>Ok</b></font>" : "<font color=\"red\"><b>Unavailable</b></font>")); builder.append(AHTML.endMultiColumnTable()); browser.setText(String.format(PAGE_TEMPLATE, builder.toString())); } + + public String getEventServiceDetails() { + String toReturn; + if (!OseeEventManager.getPreferences().isNewEvents()) { + toReturn = "New Events == OFF"; + } else if (OseeEventManager.isEventManagerConnected()) { + toReturn = "Connected"; + } else { + toReturn = "ActiveMQ JMS Service is down"; + } + return toReturn; + } } |