From 9d0929ee2b107df939b331878fba022da7eadced Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Tue, 9 Oct 2007 10:08:22 +0000 Subject: [205668] Provide buddies example https://bugs.eclipse.org/bugs/show_bug.cgi?id=205668 --- .../eclipse/net4j/buddies/internal/server/BuddyAdmin.java | 12 ++++++++++-- .../eclipse/net4j/buddies/internal/server/ServerBuddy.java | 7 +++++-- .../internal/server/protocol/OpenSessionIndication.java | 9 ++++++++- .../src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java | 2 +- .../src/org/eclipse/net4j/buddies/BuddiesUtil.java | 11 ++++++++++- .../org/eclipse/net4j/internal/buddies/ClientBuddy.java | 14 ++++++++++++-- .../org/eclipse/net4j/internal/buddies/ClientSession.java | 6 ++++-- .../src/org/eclipse/net4j/internal/buddies/Self.java | 6 ++++-- .../internal/buddies/protocol/OpenSessionRequest.java | 13 +++++++++++-- 9 files changed, 65 insertions(+), 15 deletions(-) diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java index 3ea43f5168..228669a703 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/BuddyAdmin.java @@ -15,6 +15,7 @@ import org.eclipse.net4j.IProtocol; import org.eclipse.net4j.buddies.internal.protocol.Account; import org.eclipse.net4j.buddies.internal.protocol.BuddyStateNotification; import org.eclipse.net4j.buddies.internal.protocol.CollaborationContainer; +import org.eclipse.net4j.buddies.internal.protocol.ServerFacilityFactory; import org.eclipse.net4j.buddies.internal.server.bundle.OM; import org.eclipse.net4j.buddies.internal.server.protocol.BuddyRemovedNotification; import org.eclipse.net4j.buddies.protocol.IAccount; @@ -23,6 +24,7 @@ import org.eclipse.net4j.buddies.protocol.ISession; import org.eclipse.net4j.buddies.server.IBuddyAdmin; import org.eclipse.net4j.internal.util.om.trace.ContextTracer; import org.eclipse.net4j.util.ObjectUtil; +import org.eclipse.net4j.util.container.IPluginContainer; import org.eclipse.net4j.util.event.IEvent; import org.eclipse.net4j.util.event.IListener; import org.eclipse.net4j.util.lifecycle.ILifecycleEvent; @@ -30,6 +32,7 @@ import org.eclipse.net4j.util.lifecycle.LifecycleUtil; import java.util.HashMap; import java.util.Map; +import java.util.Set; /** * @author Eike Stepper @@ -59,7 +62,7 @@ public class BuddyAdmin extends CollaborationContainer implements IBuddyAdmin, I return sessions; } - public synchronized ISession openSession(IChannel channel, String userID, String password) + public synchronized ISession openSession(IChannel channel, String userID, String password, String[] facilityTypes) { if (sessions.containsKey(userID)) { @@ -80,7 +83,7 @@ public class BuddyAdmin extends CollaborationContainer implements IBuddyAdmin, I accounts.put(userID, account); } - ServerBuddy buddy = new ServerBuddy(account); + ServerBuddy buddy = new ServerBuddy(account, facilityTypes); buddy.addListener(this); ServerSession session = new ServerSession(channel, buddy); @@ -152,4 +155,9 @@ public class BuddyAdmin extends CollaborationContainer implements IBuddyAdmin, I } } } + + public static Set getFacilityTypes() + { + return IPluginContainer.INSTANCE.getFactoryTypes(ServerFacilityFactory.PRODUCT_GROUP); + } } diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerBuddy.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerBuddy.java index 04b0cf8439..839e7a64af 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerBuddy.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerBuddy.java @@ -13,6 +13,9 @@ package org.eclipse.net4j.buddies.internal.server; import org.eclipse.net4j.buddies.internal.protocol.Buddy; import org.eclipse.net4j.buddies.protocol.IAccount; +import java.util.Arrays; +import java.util.HashSet; + /** * @author Eike Stepper */ @@ -20,9 +23,9 @@ public class ServerBuddy extends Buddy { private IAccount account; - public ServerBuddy(IAccount account) + public ServerBuddy(IAccount account, String[] facilityTypes) { - super(null); + super(null, new HashSet(Arrays.asList(facilityTypes))); this.account = account; } diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java index 81b0794d6a..64c81cd358 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/OpenSessionIndication.java @@ -50,12 +50,19 @@ public class OpenSessionIndication extends IndicationWithResponse { String userID = in.readString(); String password = in.readString(); + int size = in.readInt(); + String[] facilityTypes = new String[size]; + for (int i = 0; i < size; i++) + { + facilityTypes[i] = in.readString(); + } + synchronized (IBuddyAdmin.INSTANCE) { Map sessions = IBuddyAdmin.INSTANCE.getSessions(); buddies = sessions.keySet().toArray(new String[sessions.size()]); - ISession session = IBuddyAdmin.INSTANCE.openSession(getProtocol().getChannel(), userID, password); + ISession session = IBuddyAdmin.INSTANCE.openSession(getProtocol().getChannel(), userID, password, facilityTypes); if (session != null) { account = session.getSelf().getAccount(); diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java index f2b6a168e3..821aaa7ae7 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/server/IBuddyAdmin.java @@ -29,5 +29,5 @@ public interface IBuddyAdmin extends ICollaborationContainer public Map getSessions(); - public ISession openSession(IChannel channel, String userID, String password); + public ISession openSession(IChannel channel, String userID, String password, String[] facilityTypes); } diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/buddies/BuddiesUtil.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/buddies/BuddiesUtil.java index 0425e95077..3fac729bd1 100644 --- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/buddies/BuddiesUtil.java +++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/buddies/BuddiesUtil.java @@ -12,10 +12,14 @@ package org.eclipse.net4j.buddies; import org.eclipse.net4j.IChannel; import org.eclipse.net4j.IConnector; +import org.eclipse.net4j.buddies.internal.protocol.ClientFacilityFactory; import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants; import org.eclipse.net4j.internal.buddies.protocol.OpenSessionRequest; import org.eclipse.net4j.signal.SignalActor; import org.eclipse.net4j.util.WrappedException; +import org.eclipse.net4j.util.container.IPluginContainer; + +import java.util.Set; /** * @author Eike Stepper @@ -26,12 +30,17 @@ public final class BuddiesUtil { } + public static Set getFacilityTypes() + { + return IPluginContainer.INSTANCE.getFactoryTypes(ClientFacilityFactory.PRODUCT_GROUP); + } + public static IBuddySession openSession(IConnector connector, String userID, String password, long timeout) { try { IChannel channel = connector.openChannel(ProtocolConstants.PROTOCOL_NAME, null); - OpenSessionRequest request = new OpenSessionRequest(channel, userID, password); + OpenSessionRequest request = new OpenSessionRequest(channel, userID, password, getFacilityTypes()); return request.send(timeout); } 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 e618120b48..df5c38b8eb 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,6 +13,8 @@ package org.eclipse.net4j.internal.buddies; import org.eclipse.net4j.buddies.internal.protocol.Buddy; import org.eclipse.net4j.buddies.protocol.IAccount; +import java.util.Set; + /** * @author Eike Stepper */ @@ -24,7 +26,7 @@ public class ClientBuddy extends Buddy public ClientBuddy(ClientSession session, String userID) { - super(session); + super(session, null); this.userID = userID; } @@ -51,6 +53,14 @@ public class ClientBuddy extends Buddy protected IAccount loadAccount(String userID) { - return null; + // TODO Implement method ClientBuddy.loadAccount() + throw new UnsupportedOperationException("Not yet implemented"); + } + + @Override + protected Set loadFacilityTypes() + { + // TODO Implement method ClientBuddy.loadFacilityTypes() + throw new UnsupportedOperationException("Not yet implemented"); } } 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 8570dee753..77f277ae75 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 @@ -24,6 +24,8 @@ import org.eclipse.net4j.util.lifecycle.ILifecycleEvent; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.PlatformObject; +import java.util.Set; + /** * @author Eike Stepper */ @@ -48,9 +50,9 @@ public class ClientSession extends BuddyContainer implements IBuddySession, ILis return self; } - public void setSelf(IAccount account) + public void setSelf(IAccount account, Set facilityTypes) { - self = new Self(this, account); + self = new Self(this, account, facilityTypes); self.addListener(this); } 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 a9038403e2..c711e9b159 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 @@ -13,6 +13,8 @@ package org.eclipse.net4j.internal.buddies; import org.eclipse.net4j.buddies.internal.protocol.Buddy; import org.eclipse.net4j.buddies.protocol.IAccount; +import java.util.Set; + /** * @author Eike Stepper */ @@ -20,9 +22,9 @@ public class Self extends Buddy { private IAccount account; - protected Self(ClientSession session, IAccount account) + protected Self(ClientSession session, IAccount account, Set facilityTypes) { - super(session); + super(session, facilityTypes); this.account = account; } diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/OpenSessionRequest.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/OpenSessionRequest.java index c0cb2a2595..7844d01a5b 100644 --- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/OpenSessionRequest.java +++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/OpenSessionRequest.java @@ -22,6 +22,7 @@ import org.eclipse.net4j.util.io.ExtendedDataOutputStream; import org.eclipse.net4j.util.lifecycle.LifecycleUtil; import java.io.IOException; +import java.util.Set; /** * @author Eike Stepper @@ -32,11 +33,14 @@ public class OpenSessionRequest extends RequestWithConfirmation private String password; - public OpenSessionRequest(IChannel channel, String userID, String password) + private Set facilityTypes; + + public OpenSessionRequest(IChannel channel, String userID, String password, Set facilityTypes) { super(channel); this.userID = userID; this.password = password; + this.facilityTypes = facilityTypes; } @Override @@ -50,6 +54,11 @@ public class OpenSessionRequest extends RequestWithConfirmation { out.writeString(userID); out.writeString(password); + out.writeInt(facilityTypes.size()); + for (String facilityType : facilityTypes) + { + out.writeString(facilityType); + } } @Override @@ -63,7 +72,7 @@ public class OpenSessionRequest extends RequestWithConfirmation ClientSession session = new ClientSession(getProtocol().getChannel()); getProtocol().setInfraStructure(session); - session.setSelf(account); + session.setSelf(account, facilityTypes); int size = in.readInt(); for (int i = 0; i < size; i++) -- cgit v1.2.3