diff options
10 files changed, 203 insertions, 9 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 228669a703..1d3a3543c6 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,7 +15,6 @@ 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; diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerFacilityFactory.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerFacilityFactory.java new file mode 100644 index 0000000000..7545e117b3 --- /dev/null +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/ServerFacilityFactory.java @@ -0,0 +1,26 @@ +/*************************************************************************** + * 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.buddies.internal.server; + +import org.eclipse.net4j.internal.util.factory.Factory; + +/** + * @author Eike Stepper + */ +public abstract class ServerFacilityFactory extends Factory +{ + public static final String PRODUCT_GROUP = "org.eclipse.net4j.buddies.serverFacilities"; + + public ServerFacilityFactory(String type) + { + super(PRODUCT_GROUP, type); + } +} diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java new file mode 100644 index 0000000000..0e7a565862 --- /dev/null +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/InstallFacilityIndication.java @@ -0,0 +1,70 @@ +/*************************************************************************** + * 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.buddies.internal.server.protocol; + +import org.eclipse.net4j.buddies.internal.protocol.Collaboration; +import org.eclipse.net4j.buddies.internal.protocol.ProtocolConstants; +import org.eclipse.net4j.buddies.internal.server.BuddyAdmin; +import org.eclipse.net4j.buddies.internal.server.ServerFacilityFactory; +import org.eclipse.net4j.buddies.internal.server.bundle.OM; +import org.eclipse.net4j.buddies.protocol.IFacility; +import org.eclipse.net4j.signal.IndicationWithResponse; +import org.eclipse.net4j.util.container.IPluginContainer; +import org.eclipse.net4j.util.io.ExtendedDataInputStream; +import org.eclipse.net4j.util.io.ExtendedDataOutputStream; + +import java.io.IOException; + +/** + * @author Eike Stepper + */ +public class InstallFacilityIndication extends IndicationWithResponse +{ + private static final String FACILITY_GROUP = ServerFacilityFactory.PRODUCT_GROUP; + + private boolean success; + + public InstallFacilityIndication() + { + } + + @Override + protected short getSignalID() + { + return ProtocolConstants.SIGNAL_INSTALL_FACILITY; + } + + @Override + protected void indicating(ExtendedDataInputStream in) throws IOException + { + String collaborationID = in.readString(); + String facilityType = in.readString(); + + try + { + IFacility facility = (IFacility)IPluginContainer.INSTANCE.getElement(FACILITY_GROUP, facilityType, + collaborationID); + Collaboration collaboration = (Collaboration)BuddyAdmin.INSTANCE.getCollaborations().get(collaborationID); + collaboration.addFacility(facility); + success = true; + } + catch (RuntimeException ex) + { + OM.LOG.error(ex); + } + } + + @Override + protected void responding(ExtendedDataOutputStream out) throws IOException + { + out.writeBoolean(success); + } +} diff --git a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java index 698b576766..b79787a92f 100644 --- a/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java +++ b/plugins/org.eclipse.net4j.buddies.server/src/org/eclipse/net4j/buddies/internal/server/protocol/ServerProtocol.java @@ -66,6 +66,9 @@ public class ServerProtocol extends SignalProtocol } }; + case ProtocolConstants.SIGNAL_INSTALL_FACILITY: + return new InstallFacilityIndication(); + case ProtocolConstants.SIGNAL_MESSAGE: return new MessageIndication() { 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 3fac729bd1..ea5eb14c8a 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,8 +12,8 @@ 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.ClientFacilityFactory; import org.eclipse.net4j.internal.buddies.protocol.OpenSessionRequest; import org.eclipse.net4j.signal.SignalActor; import org.eclipse.net4j.util.WrappedException; diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/buddies/IBuddyCollaboration.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/buddies/IBuddyCollaboration.java index 94b50528c4..0eecbf3b72 100644 --- a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/buddies/IBuddyCollaboration.java +++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/buddies/IBuddyCollaboration.java @@ -20,5 +20,5 @@ public interface IBuddyCollaboration extends ICollaboration { public IBuddySession getSession(); - public IFacility installFacility(String facilityType); + public IFacility installFacility(String type); } 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 ba8929db81..dc77e79994 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 @@ -17,7 +17,9 @@ import org.eclipse.net4j.buddies.internal.protocol.Message; import org.eclipse.net4j.buddies.internal.protocol.MessageNotification; 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.util.WrappedException; +import org.eclipse.net4j.util.container.IPluginContainer; import java.util.UUID; @@ -26,6 +28,8 @@ import java.util.UUID; */ public class BuddyCollaboration extends Collaboration implements IBuddyCollaboration { + private static final String FACILITY_GROUP = ClientFacilityFactory.PRODUCT_GROUP; + private IBuddySession session; public BuddyCollaboration() @@ -38,9 +42,24 @@ public class BuddyCollaboration extends Collaboration implements IBuddyCollabora return session; } - public IFacility installFacility(String facilityType) + public IFacility installFacility(String type) { - return null; + try + { + IFacility facility = (IFacility)IPluginContainer.INSTANCE.getElement(FACILITY_GROUP, type, getID()); + boolean success = new InstallFacilityRequest(session.getChannel(), getID(), type).send(5000L); + if (success) + { + addFacility(facility); + return facility; + } + + return null; + } + catch (Exception ex) + { + throw WrappedException.wrap(ex); + } } public void sendMessage(IMessage message) diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientFacilityFactory.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientFacilityFactory.java new file mode 100644 index 0000000000..2e69bf38f4 --- /dev/null +++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/ClientFacilityFactory.java @@ -0,0 +1,26 @@ +/*************************************************************************** + * 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; + +import org.eclipse.net4j.internal.util.factory.Factory; + +/** + * @author Eike Stepper + */ +public abstract class ClientFacilityFactory extends Factory +{ + public static final String PRODUCT_GROUP = "org.eclipse.net4j.buddies.clientFacilities"; + + public ClientFacilityFactory(String type) + { + super(PRODUCT_GROUP, type); + } +} diff --git a/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InstallFacilityRequest.java b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InstallFacilityRequest.java new file mode 100644 index 0000000000..9238b5d9f7 --- /dev/null +++ b/plugins/org.eclipse.net4j.buddies/src/org/eclipse/net4j/internal/buddies/protocol/InstallFacilityRequest.java @@ -0,0 +1,55 @@ +/*************************************************************************** + * 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.signal.RequestWithConfirmation; +import org.eclipse.net4j.util.io.ExtendedDataInputStream; +import org.eclipse.net4j.util.io.ExtendedDataOutputStream; + +import java.io.IOException; + +/** + * @author Eike Stepper + */ +public class InstallFacilityRequest extends RequestWithConfirmation<Boolean> +{ + private String collaborationID; + + private String facilityType; + + public InstallFacilityRequest(IChannel channel, String collaborationID, String facilityType) + { + super(channel); + this.collaborationID = collaborationID; + this.facilityType = facilityType; + } + + @Override + protected short getSignalID() + { + return ProtocolConstants.SIGNAL_INSTALL_FACILITY; + } + + @Override + protected void requesting(ExtendedDataOutputStream out) throws IOException + { + out.writeString(collaborationID); + out.writeString(facilityType); + } + + @Override + protected Boolean confirming(ExtendedDataInputStream in) throws IOException + { + return in.readBoolean(); + } +} diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/container/ManagedContainer.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/container/ManagedContainer.java index 5217839903..4aa53008ed 100644 --- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/container/ManagedContainer.java +++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/container/ManagedContainer.java @@ -259,10 +259,6 @@ public class ManagedContainer extends Lifecycle implements IManagedContainer element = postProcessElement(productGroup, factoryType, description, element); LifecycleUtil.activate(element); putElement(key, element); - // EventUtil.addListener(element, elementListener); - // key.setID(++maxElementID); - // elementRegistry.put(key, element); - // fireEvent(new SingleDeltaContainerEvent<Object>(this, element, IContainerDelta.Kind.ADDED)); } return element; |