Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2007-11-12 08:17:52 +0000
committerEike Stepper2007-11-12 08:17:52 +0000
commit5ab66b90e49b2b7ab4006eb625fe97b22b2943c8 (patch)
tree0bee074589cb65eaa81c25a08bb8a1a4d7213edb /plugins/org.eclipse.net4j.buddies/src
parente8cc466cd37d0200b41628f10949cd9d5998acdb (diff)
downloadcdo-5ab66b90e49b2b7ab4006eb625fe97b22b2943c8.tar.gz
cdo-5ab66b90e49b2b7ab4006eb625fe97b22b2943c8.tar.xz
cdo-5ab66b90e49b2b7ab4006eb625fe97b22b2943c8.zip
[209380] Add invitation capability for multi buddy collaborations
https://bugs.eclipse.org/bugs/show_bug.cgi?id=209380
Diffstat (limited to 'plugins/org.eclipse.net4j.buddies/src')
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java15
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java9
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java7
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/Self.java27
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java16
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java16
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java23
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java13
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientProtocol.java25
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java12
10 files changed, 78 insertions, 85 deletions
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java
index 5dfc69fe26..281adaa414 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/BuddyCollaboration.java
@@ -29,7 +29,6 @@ import org.eclipse.net4j.util.container.IPluginContainer;
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
/**
* @author Eike Stepper
@@ -40,9 +39,9 @@ public class BuddyCollaboration extends Collaboration implements IBuddyCollabora
private IBuddySession session;
- public BuddyCollaboration(IBuddySession session, long id, Set<IBuddy> buddies)
+ public BuddyCollaboration(IBuddySession session, long id)
{
- super(id, buddies);
+ super(id);
this.session = session;
}
@@ -113,20 +112,20 @@ public class BuddyCollaboration extends Collaboration implements IBuddyCollabora
public void invite(IBuddy... buddies)
{
- List<IBuddy> toBeInvited = new ArrayList<IBuddy>();
+ List<IBuddy> invitations = new ArrayList<IBuddy>();
for (IBuddy buddy : buddies)
{
- if (getBuddy(buddy.getUserID()) == null)
+ if (getMembership(buddy) == null)
{
- toBeInvited.add(buddy);
+ invitations.add(buddy);
}
}
- if (!toBeInvited.isEmpty())
+ if (!invitations.isEmpty())
{
try
{
- new InviteBuddiesNotification(session.getChannel(), getID(), toBeInvited).send();
+ new InviteBuddiesNotification(session.getChannel(), getID(), invitations).send();
}
catch (Exception ex)
{
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java
index adf9fad3c2..b8dc21fcef 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientBuddy.java
@@ -13,8 +13,9 @@ package org.eclipse.net4j.internal.buddies;
import org.eclipse.net4j.buddies.internal.protocol.Buddy;
import org.eclipse.net4j.buddies.protocol.IAccount;
import org.eclipse.net4j.buddies.protocol.IBuddy;
-import org.eclipse.net4j.buddies.protocol.ICollaboration;
+import org.eclipse.net4j.buddies.protocol.IMembership;
+import java.util.Collection;
import java.util.Set;
/**
@@ -53,17 +54,17 @@ public class ClientBuddy extends Buddy
return account;
}
- public ICollaboration initiate(Set<IBuddy> buddies)
+ public IMembership[] initiate(Collection<IBuddy> buddies)
{
throw new UnsupportedOperationException();
}
- public ICollaboration join(long collaborationID)
+ public IMembership join(long collaborationID)
{
throw new UnsupportedOperationException();
}
- public ICollaboration join(Object invitationToken)
+ public IMembership join(Object invitationToken)
{
throw new UnsupportedOperationException();
}
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java
index 6d69f5fc36..ab74d579b5 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientSession.java
@@ -18,7 +18,7 @@ import org.eclipse.net4j.buddies.internal.protocol.Collaboration;
import org.eclipse.net4j.buddies.protocol.IAccount;
import org.eclipse.net4j.buddies.protocol.IBuddy;
import org.eclipse.net4j.buddies.protocol.IBuddyStateEvent;
-import org.eclipse.net4j.buddies.protocol.ICollaboration;
+import org.eclipse.net4j.buddies.protocol.IMembership;
import org.eclipse.net4j.internal.buddies.bundle.OM;
import org.eclipse.net4j.util.event.IEvent;
import org.eclipse.net4j.util.event.IListener;
@@ -117,9 +117,10 @@ public class ClientSession extends BuddyContainer implements IBuddySession, ILis
IBuddy buddy = removeBuddy(userID);
if (buddy != null)
{
- for (ICollaboration collaboration : self.getCollaborations())
+ for (IMembership membership : self.getMemberships())
{
- ((Collaboration)collaboration).removeBuddy(userID);
+ Collaboration collaboration = (Collaboration)membership.getCollaboration();
+ collaboration.removeMembership(buddy);
}
LifecycleUtil.deactivate(buddy);
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/Self.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/Self.java
index 6716fe8987..7ff9246a58 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/Self.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/Self.java
@@ -12,14 +12,18 @@ package org.eclipse.net4j.internal.buddies;
import org.eclipse.net4j.IChannel;
import org.eclipse.net4j.buddies.internal.protocol.Buddy;
+import org.eclipse.net4j.buddies.internal.protocol.Membership;
import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants;
import org.eclipse.net4j.buddies.protocol.IAccount;
import org.eclipse.net4j.buddies.protocol.IBuddy;
-import org.eclipse.net4j.buddies.protocol.ICollaboration;
+import org.eclipse.net4j.buddies.protocol.IMembership;
import org.eclipse.net4j.internal.buddies.protocol.InitiateCollaborationRequest;
import org.eclipse.net4j.util.WrappedException;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import java.util.Set;
/**
@@ -51,7 +55,7 @@ public class Self extends Buddy
return account;
}
- public ICollaboration initiate(Set<IBuddy> buddies)
+ public IMembership[] initiate(Collection<IBuddy> buddies)
{
try
{
@@ -59,15 +63,18 @@ public class Self extends Buddy
IChannel channel = session.getChannel();
long id = new InitiateCollaborationRequest(channel, buddies).send(ProtocolConstants.TIMEOUT);
- BuddyCollaboration collaboration = new BuddyCollaboration(session, id, buddies);
+ BuddyCollaboration collaboration = new BuddyCollaboration(session, id);
LifecycleUtil.activate(collaboration);
- addCollaboration(collaboration);
+ Membership.create(this, collaboration);
+
+ List<IMembership> memberships = new ArrayList<IMembership>();
for (IBuddy buddy : buddies)
{
- ((Buddy)buddy).addCollaboration(collaboration);
+ IMembership membership = Membership.create(buddy, collaboration);
+ memberships.add(membership);
}
- return collaboration;
+ return memberships.toArray(new IMembership[memberships.size()]);
}
catch (Exception ex)
{
@@ -75,13 +82,13 @@ public class Self extends Buddy
}
}
- public ICollaboration join(long collaborationID)
+ public IMembership join(long collaborationID)
{
// TODO Implement method Self.join()
throw new UnsupportedOperationException("Not yet implemented");
}
- public ICollaboration join(Object invitationToken)
+ public IMembership join(Object invitationToken)
{
// TODO Implement method Self.join()
throw new UnsupportedOperationException("Not yet implemented");
@@ -90,9 +97,9 @@ public class Self extends Buddy
@Override
protected void doDeactivate() throws Exception
{
- for (ICollaboration collaboration : getCollaborations())
+ for (IMembership membership : getMemberships())
{
- LifecycleUtil.deactivate(collaboration);
+ LifecycleUtil.deactivate(membership.getCollaboration());
}
super.doDeactivate();
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java
index 64b48dc600..7a69d06d80 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyAddedIndication.java
@@ -13,7 +13,6 @@ package org.eclipse.net4j.internal.buddies.protocol;
import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants;
import org.eclipse.net4j.internal.buddies.ClientSession;
import org.eclipse.net4j.signal.Indication;
-import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import java.io.IOException;
@@ -37,18 +36,7 @@ public class BuddyAddedIndication extends Indication
protected void indicating(ExtendedDataInputStream in) throws IOException
{
String buddy = in.readString();
- for (int i = 0; i < 50; i++)
- {
- ClientSession session = (ClientSession)getProtocol().getInfraStructure();
- if (session == null)
- {
- ConcurrencyUtil.sleep(100);
- }
- else
- {
- session.buddyAdded(buddy);
- break;
- }
- }
+ ClientSession session = ((ClientProtocol)getProtocol()).getSession();
+ session.buddyAdded(buddy);
}
}
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java
index 6cf03b6feb..c0665d3cdc 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/BuddyRemovedIndication.java
@@ -13,7 +13,6 @@ package org.eclipse.net4j.internal.buddies.protocol;
import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants;
import org.eclipse.net4j.internal.buddies.ClientSession;
import org.eclipse.net4j.signal.Indication;
-import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import java.io.IOException;
@@ -37,18 +36,7 @@ public class BuddyRemovedIndication extends Indication
protected void indicating(ExtendedDataInputStream in) throws IOException
{
String buddy = in.readString();
- for (int i = 0; i < 50; i++)
- {
- ClientSession session = (ClientSession)getProtocol().getInfraStructure();
- if (session == null)
- {
- ConcurrencyUtil.sleep(100);
- }
- else
- {
- session.buddyRemoved(buddy);
- break;
- }
- }
+ ClientSession session = ((ClientProtocol)getProtocol()).getSession();
+ session.buddyRemoved(buddy);
}
}
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java
index ec36325620..ad0fbb9398 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientBuddyStateIndication.java
@@ -4,7 +4,6 @@ import org.eclipse.net4j.buddies.internal.protocol.BuddyStateIndication;
import org.eclipse.net4j.buddies.protocol.IBuddy.State;
import org.eclipse.net4j.internal.buddies.ClientBuddy;
import org.eclipse.net4j.internal.buddies.ClientSession;
-import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
/**
* @author Eike Stepper
@@ -16,25 +15,13 @@ public class ClientBuddyStateIndication extends BuddyStateIndication
}
@Override
- protected void stateChanged(String userID, State state)
+ protected void stateChanged(final String userID, final State state)
{
- for (int i = 0; i < 50; i++)
+ ClientSession session = ((ClientProtocol)getProtocol()).getSession();
+ ClientBuddy buddy = (ClientBuddy)session.getBuddy(userID);
+ if (buddy != null)
{
- ClientSession session = (ClientSession)getProtocol().getInfraStructure();
- if (session == null)
- {
- ConcurrencyUtil.sleep(100);
- }
- else
- {
- ClientBuddy buddy = (ClientBuddy)session.getBuddy(userID);
- if (buddy != null)
- {
- buddy.setState(state);
- }
-
- break;
- }
+ buddy.setState(state);
}
}
} \ No newline at end of file
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java
index 3064146c44..cb98d4b437 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientCollaborationLeftIndication.java
@@ -20,19 +20,16 @@ import org.eclipse.net4j.internal.buddies.Self;
*/
public class ClientCollaborationLeftIndication extends CollaborationLeftIndication
{
- private Self self;
-
public ClientCollaborationLeftIndication(Self self)
{
- super(self);
- this.self = self;
+ super(self.getSession(), self);
}
@Override
- protected void collaborationLeft(Collaboration collaboration, String userID)
+ protected void collaborationLeft(Buddy buddy, Collaboration collaboration)
{
- Buddy buddy = (Buddy)self.getSession().getBuddy(userID);
- buddy.removeCollaboration(collaboration.getID());
- super.collaborationLeft(collaboration, userID);
+ buddy.removeMembership(collaboration);
+ collaboration.removeMembership(buddy);
+ super.collaborationLeft(buddy, collaboration);
}
}
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientProtocol.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientProtocol.java
index ac1ca69e75..7f11c483c3 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientProtocol.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/ClientProtocol.java
@@ -13,15 +13,21 @@ package org.eclipse.net4j.internal.buddies.protocol;
import org.eclipse.net4j.buddies.internal.protocol.MessageIndication;
import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants;
import org.eclipse.net4j.buddies.protocol.ISession;
+import org.eclipse.net4j.internal.buddies.ClientSession;
import org.eclipse.net4j.internal.buddies.Self;
import org.eclipse.net4j.signal.SignalProtocol;
import org.eclipse.net4j.signal.SignalReactor;
+import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
/**
* @author Eike Stepper
*/
public class ClientProtocol extends SignalProtocol
{
+ private static final long GET_SESSION_TIMEOUT = 20000;
+
+ private static final int GET_SESSION_INTERVAL = 100;
+
public ClientProtocol()
{
}
@@ -66,4 +72,23 @@ public class ClientProtocol extends SignalProtocol
ISession session = (ISession)getInfraStructure();
return (Self)session.getSelf();
}
+
+ public ClientSession getSession()
+ {
+ int max = (int)(GET_SESSION_TIMEOUT / GET_SESSION_INTERVAL);
+ for (int i = 0; i < max; i++)
+ {
+ ClientSession session = (ClientSession)getInfraStructure();
+ if (session == null)
+ {
+ ConcurrencyUtil.sleep(GET_SESSION_INTERVAL);
+ }
+ else
+ {
+ return session;
+ }
+ }
+
+ throw new IllegalStateException("No session after " + max + " milliseconds");
+ }
}
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java
index bb4d1420b2..5c951b1aa3 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java
@@ -11,11 +11,11 @@
package org.eclipse.net4j.internal.buddies.protocol;
import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.internal.protocol.Membership;
import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants;
import org.eclipse.net4j.buddies.protocol.IBuddy;
import org.eclipse.net4j.buddies.protocol.ProtocolUtil;
import org.eclipse.net4j.internal.buddies.BuddyCollaboration;
-import org.eclipse.net4j.internal.buddies.ClientBuddy;
import org.eclipse.net4j.internal.buddies.Self;
import org.eclipse.net4j.signal.Indication;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
@@ -51,20 +51,20 @@ public class CollaborationInitiatedIndication extends Indication
BuddyCollaboration collaboration = (BuddyCollaboration)self.getCollaboration(collaborationID);
if (collaboration == null)
{
- collaboration = new BuddyCollaboration(session, collaborationID, buddies);
+ collaboration = new BuddyCollaboration(session, collaborationID);
LifecycleUtil.activate(collaboration);
- self.addCollaboration(collaboration);
+
+ Membership.create(self, collaboration);
for (IBuddy buddy : buddies)
{
- ((ClientBuddy)buddy).addCollaboration(collaboration);
+ Membership.create(buddy, collaboration);
}
}
else
{
for (IBuddy buddy : buddies)
{
- collaboration.addBuddy(buddy);
- ((ClientBuddy)buddy).addCollaboration(collaboration);
+ Membership.create(buddy, collaboration);
}
}
}

Back to the top