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-10 10:47:41 +0000
committerEike Stepper2007-11-10 10:47:41 +0000
commit4fbe5ddbb62e439ad7708520674c3f03ebb512c6 (patch)
tree490f76a334bd59b6a404ddf23bd799a59093093b /plugins/org.eclipse.net4j.buddies/src
parent1f56c2e90579798c8a922db1a3d7cacd26348fd3 (diff)
downloadcdo-4fbe5ddbb62e439ad7708520674c3f03ebb512c6.tar.gz
cdo-4fbe5ddbb62e439ad7708520674c3f03ebb512c6.tar.xz
cdo-4fbe5ddbb62e439ad7708520674c3f03ebb512c6.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.java16
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/CollaborationInitiatedIndication.java30
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java20
-rw-r--r--plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InviteBuddiesNotification.java51
4 files changed, 87 insertions, 30 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 c81a30a521..5dfc69fe26 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
@@ -23,6 +23,7 @@ import org.eclipse.net4j.buddies.protocol.IBuddy;
import org.eclipse.net4j.buddies.protocol.IFacility;
import org.eclipse.net4j.buddies.protocol.IMessage;
import org.eclipse.net4j.internal.buddies.protocol.InstallFacilityRequest;
+import org.eclipse.net4j.internal.buddies.protocol.InviteBuddiesNotification;
import org.eclipse.net4j.util.WrappedException;
import org.eclipse.net4j.util.container.IPluginContainer;
@@ -112,11 +113,24 @@ public class BuddyCollaboration extends Collaboration implements IBuddyCollabora
public void invite(IBuddy... buddies)
{
+ List<IBuddy> toBeInvited = new ArrayList<IBuddy>();
for (IBuddy buddy : buddies)
{
if (getBuddy(buddy.getUserID()) == null)
{
- System.out.println("INVITING: " + buddy);
+ toBeInvited.add(buddy);
+ }
+ }
+
+ if (!toBeInvited.isEmpty())
+ {
+ try
+ {
+ new InviteBuddiesNotification(session.getChannel(), getID(), toBeInvited).send();
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
}
}
}
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 60aa4db825..bb4d1420b2 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
@@ -13,6 +13,7 @@ package org.eclipse.net4j.internal.buddies.protocol;
import org.eclipse.net4j.buddies.IBuddySession;
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;
@@ -21,7 +22,6 @@ import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import java.io.IOException;
-import java.util.HashSet;
import java.util.Set;
/**
@@ -46,24 +46,26 @@ public class CollaborationInitiatedIndication extends Indication
Self self = (Self)session.getSelf();
long collaborationID = in.readLong();
- int size = in.readInt();
- Set<IBuddy> buddies = new HashSet<IBuddy>();
- for (int i = 0; i < size; i++)
+ Set<IBuddy> buddies = ProtocolUtil.readBuddies(in, session);
+
+ BuddyCollaboration collaboration = (BuddyCollaboration)self.getCollaboration(collaborationID);
+ if (collaboration == null)
{
- String userID = in.readString();
- IBuddy buddy = session.getBuddy(userID);
- if (buddy != null)
+ collaboration = new BuddyCollaboration(session, collaborationID, buddies);
+ LifecycleUtil.activate(collaboration);
+ self.addCollaboration(collaboration);
+ for (IBuddy buddy : buddies)
{
- buddies.add(buddy);
+ ((ClientBuddy)buddy).addCollaboration(collaboration);
}
}
-
- BuddyCollaboration collaboration = new BuddyCollaboration(session, collaborationID, buddies);
- LifecycleUtil.activate(collaboration);
- self.addCollaboration(collaboration);
- for (IBuddy buddy : buddies)
+ else
{
- ((ClientBuddy)buddy).addCollaboration(collaboration);
+ for (IBuddy buddy : buddies)
+ {
+ collaboration.addBuddy(buddy);
+ ((ClientBuddy)buddy).addCollaboration(collaboration);
+ }
}
}
}
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java
index d8ff8dd05a..0a8e92a338 100644
--- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InitiateCollaborationRequest.java
@@ -13,21 +13,22 @@ package org.eclipse.net4j.internal.buddies.protocol;
import org.eclipse.net4j.IChannel;
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.signal.RequestWithConfirmation;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
import java.io.IOException;
-import java.util.Set;
+import java.util.Collection;
/**
* @author Eike Stepper
*/
public class InitiateCollaborationRequest extends RequestWithConfirmation<Long>
{
- private Set<IBuddy> buddies;
+ private Collection<IBuddy> buddies;
- public InitiateCollaborationRequest(IChannel channel, Set<IBuddy> buddies)
+ public InitiateCollaborationRequest(IChannel channel, Collection<IBuddy> buddies)
{
super(channel);
this.buddies = buddies;
@@ -42,18 +43,7 @@ public class InitiateCollaborationRequest extends RequestWithConfirmation<Long>
@Override
protected void requesting(ExtendedDataOutputStream out) throws IOException
{
- if (buddies == null)
- {
- out.writeInt(0);
- }
- else
- {
- out.writeInt(buddies.size());
- for (IBuddy buddy : buddies)
- {
- out.writeString(buddy.getUserID());
- }
- }
+ ProtocolUtil.writeBuddies(out, buddies);
}
@Override
diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InviteBuddiesNotification.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InviteBuddiesNotification.java
new file mode 100644
index 0000000000..4c7375dfce
--- /dev/null
+++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InviteBuddiesNotification.java
@@ -0,0 +1,51 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2007 Eike Stepper, Germany.
+ * 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:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.internal.buddies.protocol;
+
+import org.eclipse.net4j.IChannel;
+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.signal.Request;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+
+import java.io.IOException;
+import java.util.Collection;
+
+/**
+ * @author Eike Stepper
+ */
+public class InviteBuddiesNotification extends Request
+{
+ private long collaborationID;
+
+ private Collection<IBuddy> buddies;
+
+ public InviteBuddiesNotification(IChannel channel, long collaborationID, Collection<IBuddy> buddies)
+ {
+ super(channel);
+ this.buddies = buddies;
+ this.collaborationID = collaborationID;
+ }
+
+ @Override
+ protected short getSignalID()
+ {
+ return ProtocolConstants.SIGNAL_INVITE_BUDDIES;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out) throws IOException
+ {
+ out.writeLong(collaborationID);
+ ProtocolUtil.writeBuddies(out, buddies);
+ }
+}

Back to the top