diff options
author | Eike Stepper | 2007-11-10 10:47:41 +0000 |
---|---|---|
committer | Eike Stepper | 2007-11-10 10:47:41 +0000 |
commit | 4fbe5ddbb62e439ad7708520674c3f03ebb512c6 (patch) | |
tree | 490f76a334bd59b6a404ddf23bd799a59093093b /plugins/org.eclipse.net4j.buddies/src | |
parent | 1f56c2e90579798c8a922db1a3d7cacd26348fd3 (diff) | |
download | cdo-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')
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); + } +} |