diff options
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.java | 69 |
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(); + } + } } |