Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java69
1 files changed, 68 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
index 41c543d5fb..7d2f49ccc2 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Session.java
@@ -17,16 +17,26 @@ import org.eclipse.emf.cdo.internal.server.bundle.OM;
import org.eclipse.emf.cdo.internal.server.protocol.CDOServerProtocol;
import org.eclipse.emf.cdo.internal.server.protocol.InvalidationRequest;
import org.eclipse.emf.cdo.protocol.CDOID;
+import org.eclipse.emf.cdo.protocol.CDOProtocolConstants;
import org.eclipse.emf.cdo.protocol.model.CDOClassRef;
import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.server.ISessionViewsEvent;
+import org.eclipse.emf.cdo.server.IView;
+
+import org.eclipse.net4j.internal.util.container.SingleDeltaContainerEvent;
+import org.eclipse.net4j.internal.util.event.Notifier;
+import org.eclipse.net4j.util.container.IContainerDelta;
+import org.eclipse.net4j.util.container.IContainerDelta.Kind;
import java.util.HashSet;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
/**
* @author Eike Stepper
*/
-public class Session implements ISession, CDOIDProvider
+public class Session extends Notifier implements ISession, CDOIDProvider
{
private SessionManager sessionManager;
@@ -34,6 +44,8 @@ public class Session implements ISession, CDOIDProvider
private int sessionID;
+ private ConcurrentMap<Integer, View> views = new ConcurrentHashMap();
+
private Set<CDOID> knownObjects = new HashSet();
public Session(SessionManager sessionManager, CDOServerProtocol protocol, int sessionID)
@@ -58,6 +70,46 @@ public class Session implements ISession, CDOIDProvider
return protocol;
}
+ public View[] getElements()
+ {
+ return getViews();
+ }
+
+ public boolean isEmpty()
+ {
+ return views.isEmpty();
+ }
+
+ public View[] getViews()
+ {
+ return views.values().toArray(new View[views.size()]);
+ }
+
+ public void notifyViewsChanged(Session session, int viewID, byte kind)
+ {
+ switch (kind)
+ {
+ case CDOProtocolConstants.VIEW_ADDED:
+ {
+ View view = new View(this, viewID);
+ views.put(viewID, view);
+ fireEvent(new ViewsEvent(view, IContainerDelta.Kind.ADDED));
+ break;
+ }
+
+ case CDOProtocolConstants.VIEW_REMOVED:
+ {
+ View view = views.remove(viewID);
+ if (view != null)
+ {
+ fireEvent(new ViewsEvent(view, IContainerDelta.Kind.REMOVED));
+ }
+
+ break;
+ }
+ }
+ }
+
public void notifyInvalidation(long timeStamp, CDORevisionImpl[] dirtyObjects)
{
try
@@ -88,4 +140,19 @@ public class Session implements ISession, CDOIDProvider
CDOClassRef type = sessionManager.getRepository().getObjectType(id);
return CDOIDImpl.create(id.getValue(), type);
}
+
+ private final class ViewsEvent extends SingleDeltaContainerEvent<IView> implements ISessionViewsEvent
+ {
+ private static final long serialVersionUID = 1L;
+
+ private ViewsEvent(IView view, Kind kind)
+ {
+ super(Session.this, view, kind);
+ }
+
+ public IView getView()
+ {
+ return getDeltaElement();
+ }
+ }
}

Back to the top