Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2006-06-03 06:05:09 +0000
committerslewis2006-06-03 06:05:09 +0000
commit9c2f94847f97d465c906e706103a9ea3cf13f48f (patch)
tree84ab834f678f18117119e41d1b060350ecce524b
parent2a4ee8c278fb83466fb1c9ed3ea9aa3297666a3c (diff)
downloadorg.eclipse.ecf-9c2f94847f97d465c906e706103a9ea3cf13f48f.tar.gz
org.eclipse.ecf-9c2f94847f97d465c906e706103a9ea3cf13f48f.tar.xz
org.eclipse.ecf-9c2f94847f97d465c906e706103a9ea3cf13f48f.zip
Tested and debugged handling of shared object messages for xmpp provider. Also added trivial test UI to the RosterView (along with RosterViewSharedObject)
-rw-r--r--examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/PresenceContainerUI.java7
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java26
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/META-INF/MANIFEST.MF2
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java61
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterViewSharedObject.java43
-rw-r--r--framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/AbstractSharedObject.java4
-rw-r--r--framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/SharedObjectMsgEventProcessor.java9
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/META-INF/MANIFEST.MF2
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java22
9 files changed, 137 insertions, 39 deletions
diff --git a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/PresenceContainerUI.java b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/PresenceContainerUI.java
index 2edc052d9..e50d18afb 100644
--- a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/PresenceContainerUI.java
+++ b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/PresenceContainerUI.java
@@ -3,6 +3,7 @@ package org.eclipse.ecf.example.collab;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ecf.core.IContainer;
+import org.eclipse.ecf.core.ISharedObjectContainer;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.presence.IAccountManager;
import org.eclipse.ecf.presence.IMessageListener;
@@ -30,7 +31,8 @@ public class PresenceContainerUI {
protected IPresenceSender presenceSender = null;
protected IAccountManager accountManager = null;
protected IPresenceContainer pc = null;
-
+ protected ISharedObjectContainer soContainer = null;
+
protected org.eclipse.ecf.core.user.User localUser = null;
protected ID groupID = null;
protected IContainer container;
@@ -44,6 +46,7 @@ public class PresenceContainerUI {
protected void setup(final IContainer container, final ID localUser, final String nick) {
this.container = container;
+ this.soContainer = (ISharedObjectContainer) this.container.getAdapter(ISharedObjectContainer.class);
Display.getDefault().syncExec(new Runnable() {
public void run() {
try {
@@ -104,7 +107,7 @@ public class PresenceContainerUI {
}
};
PresenceContainerUI.this.groupID = joinedContainer;
- rosterView.addAccount(joinedContainer,PresenceContainerUI.this.localUser,handler,pc);
+ rosterView.addAccount(joinedContainer,PresenceContainerUI.this.localUser,handler,pc,soContainer);
}
});
}
diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java
index d7a9397c0..4bf24936e 100644
--- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java
+++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java
@@ -701,20 +701,18 @@ public abstract class SOContainer implements ISharedObjectContainer {
ContainerMessage.SharedObjectMessage resp = (ContainerMessage.SharedObjectMessage) mess
.getData();
synchronized (getGroupMembershipLock()) {
- if (verifyToIDForSharedObjectMessage(toID)) {
- SOWrapper sow = getSharedObjectWrapper(resp
- .getFromSharedObjectID());
- if (sow != null) {
- try {
- sow
- .deliverSharedObjectMessage(
- fromID,
- (Serializable) deserializeSharedObjectMessage((byte[]) resp
- .getData()));
- } catch (ClassNotFoundException e) {
- dumpStack(
- "Exception in handleSharedObjectMessage:"+resp,e);
- }
+ SOWrapper sow = getSharedObjectWrapper(resp
+ .getFromSharedObjectID());
+ if (sow != null) {
+ try {
+ sow
+ .deliverSharedObjectMessage(
+ fromID,
+ (Serializable) deserializeSharedObjectMessage((byte[]) resp
+ .getData()));
+ } catch (ClassNotFoundException e) {
+ dumpStack(
+ "Exception in handleSharedObjectMessage:"+resp,e);
}
}
forward(fromID, toID, mess);
diff --git a/framework/bundles/org.eclipse.ecf.ui/META-INF/MANIFEST.MF b/framework/bundles/org.eclipse.ecf.ui/META-INF/MANIFEST.MF
index 7ffa7edce..ede15475e 100644
--- a/framework/bundles/org.eclipse.ecf.ui/META-INF/MANIFEST.MF
+++ b/framework/bundles/org.eclipse.ecf.ui/META-INF/MANIFEST.MF
@@ -19,4 +19,6 @@ Provide-Package: org.eclipse.ecf.ui,
org.eclipse.ecf.ui.views,
org.eclipse.ecf.ui.wizards
Export-Package: org.eclipse.ecf.ui.views, org.eclipse.ecf.ui.dialogs
+Eclipse-RegisterBuddy: org.eclipse.ecf
+Eclipse-BuddyPolicy: dependent
diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java
index 42bafe14e..a624bc524 100644
--- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java
+++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java
@@ -32,8 +32,11 @@ import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.Path;
import org.eclipse.ecf.core.ContainerConnectException;
import org.eclipse.ecf.core.ContainerInstantiationException;
+import org.eclipse.ecf.core.ISharedObjectContainer;
+import org.eclipse.ecf.core.SharedObjectAddException;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDFactory;
+import org.eclipse.ecf.core.identity.IDInstantiationException;
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.core.user.IUser;
import org.eclipse.ecf.core.user.User;
@@ -120,13 +123,27 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
IUser user;
ILocalInputHandler inputHandler;
IPresenceContainer container;
+ ISharedObjectContainer soContainer;
+ RosterViewSharedObject sharedObject;
+
public UserAccount(ID serviceID, IUser user,
- ILocalInputHandler handler, IPresenceContainer container) {
+ ILocalInputHandler handler, IPresenceContainer container, ISharedObjectContainer soContainer) {
this.serviceID = serviceID;
this.user = user;
this.inputHandler = handler;
this.container = container;
+ this.soContainer = soContainer;
+ if (this.soContainer != null) {
+ try {
+ sharedObject = new RosterViewSharedObject(RosterView.this);
+ soContainer.getSharedObjectManager().addSharedObject(IDFactory.getDefault().createStringID(RosterViewSharedObject.class.getName()), sharedObject, null);
+ } catch (Exception e) {
+ sharedObject = null;
+ e.printStackTrace();
+ }
+ }
}
+
public ID getServiceID() {
return serviceID;
}
@@ -136,9 +153,22 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
public ILocalInputHandler getInputHandler() {
return inputHandler;
}
- public IPresenceContainer getContainer() {
+ public IPresenceContainer getPresenceContainer() {
return container;
}
+ public ISharedObjectContainer getSOContainer() {
+ return soContainer;
+ }
+ public RosterViewSharedObject getSharedObject() {
+ return sharedObject;
+ }
+ }
+
+ protected boolean isSOContainerAccount(ID serviceID) {
+ if (serviceID == null) return false;
+ UserAccount ua = getAccount(serviceID);
+ if (ua != null) return ua.getSharedObject() != null;
+ return false;
}
protected void addAccount(UserAccount account) {
ViewContentProvider vcp = (ViewContentProvider) viewer
@@ -730,6 +760,17 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
.getSharedImages().getImageDescriptor(
ISharedImages.IMG_TOOL_DELETE));
manager.add(removeUserAction);
+
+ ID serviceID = tb.getServiceID();
+ final UserAccount ua = getAccount(serviceID);
+ Action sendSOMessageAction = new Action() {
+ public void run() {
+ sendSOMessageToTarget(ua,targetID);
+ }
+ };
+ sendSOMessageAction.setText("Send ECF private message to "+targetID.getName());
+ sendSOMessageAction.setEnabled(isSOContainerAccount(serviceID));
+ manager.add(sendSOMessageAction);
} else if (treeObject instanceof TreeAccount) {
final TreeAccount treeAccount = (TreeAccount) treeObject;
final ID accountID = treeAccount.getId();
@@ -811,10 +852,16 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
// Other plug-ins can contribute there actions here
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
+ protected void sendSOMessageToTarget(UserAccount account, ID targetID) {
+ RosterViewSharedObject so = account.getSharedObject();
+ if (so != null) {
+ so.sendMessageTo(targetID, "hello!");
+ }
+ }
protected void changePasswordForAccount(ID accountID) {
UserAccount account = getAccount(accountID);
if (account != null) {
- IPresenceContainer pc = account.getContainer();
+ IPresenceContainer pc = account.getPresenceContainer();
IAccountManager am = pc.getAccountManager();
ChangePasswordDialog cpd = new ChangePasswordDialog(viewer.getControl().getShell());
cpd.open();
@@ -951,7 +998,7 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
};
}
protected void showChatRoomsForAccount(UserAccount ua) {
- IChatRoomManager manager = ua.getContainer().getChatRoomManager();
+ IChatRoomManager manager = ua.getPresenceContainer().getChatRoomManager();
if (manager != null) showChatRooms(new IChatRoomManager [] { manager});
else showChatRooms(new IChatRoomManager [] {});
}
@@ -1129,7 +1176,7 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
List list = new ArrayList();
for (Iterator i = accounts.values().iterator(); i.hasNext();) {
UserAccount ua = (UserAccount) i.next();
- IChatRoomManager man = ua.getContainer().getChatRoomManager();
+ IChatRoomManager man = ua.getPresenceContainer().getChatRoomManager();
if (man != null) list.add(man);
}
// get chat rooms, allow user to choose desired one and open it
@@ -1300,9 +1347,9 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
}
}
public void addAccount(ID account, IUser user, ILocalInputHandler handler,
- IPresenceContainer container) {
+ IPresenceContainer container, ISharedObjectContainer soContainer) {
if (account != null) {
- addAccount(new UserAccount(account, user, handler, container));
+ addAccount(new UserAccount(account, user, handler, container, soContainer));
setToolbarEnabled(true);
}
}
diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterViewSharedObject.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterViewSharedObject.java
new file mode 100644
index 000000000..a124bbeee
--- /dev/null
+++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterViewSharedObject.java
@@ -0,0 +1,43 @@
+package org.eclipse.ecf.ui.views;
+
+import java.io.IOException;
+
+import org.eclipse.ecf.core.events.ISharedObjectMessageEvent;
+import org.eclipse.ecf.core.identity.ID;
+import org.eclipse.ecf.core.sharedobject.AbstractSharedObject;
+import org.eclipse.ecf.core.sharedobject.SharedObjectMsg;
+import org.eclipse.ecf.core.sharedobject.SharedObjectMsgEvent;
+import org.eclipse.ecf.core.util.Event;
+
+public class RosterViewSharedObject extends AbstractSharedObject {
+
+ RosterView view;
+
+ public RosterViewSharedObject(RosterView view) {
+ this.view = view;
+ }
+
+ public void sendMessageTo(ID targetID, String message) {
+ try {
+ super.sendSharedObjectMsgTo(targetID, SharedObjectMsg.createMsg(
+ null, "handleMessage", message));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected Event handleSharedObjectMsgEvent(ISharedObjectMessageEvent event) {
+ try {
+ ((SharedObjectMsgEvent) event.getData()).getSharedObjectMsg()
+ .invoke(this);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return event;
+ }
+
+ protected void handleMessage(String message) {
+ // XXX this should call the view back to display the message/do other things, etc
+ System.out.println("GOT MESSAGE: " + message);
+ }
+}
diff --git a/framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/AbstractSharedObject.java b/framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/AbstractSharedObject.java
index 38f578316..7bdd06f10 100644
--- a/framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/AbstractSharedObject.java
+++ b/framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/AbstractSharedObject.java
@@ -16,6 +16,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
+
import org.eclipse.ecf.core.IIdentifiable;
import org.eclipse.ecf.core.ISharedObject;
import org.eclipse.ecf.core.ISharedObjectConfig;
@@ -23,6 +24,7 @@ import org.eclipse.ecf.core.ISharedObjectContext;
import org.eclipse.ecf.core.ISharedObjectManager;
import org.eclipse.ecf.core.ReplicaSharedObjectDescription;
import org.eclipse.ecf.core.SharedObjectInitException;
+import org.eclipse.ecf.core.events.ISharedObjectMessageEvent;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.util.Event;
import org.eclipse.ecf.core.util.IEventProcessor;
@@ -253,7 +255,7 @@ public class AbstractSharedObject implements ISharedObject,
* will receive no further processing. If non-null the provided Event will be
* passed to subsequent event processors.
*/
- protected Event handleSharedObjectMsgEvent(SharedObjectMsgEvent event) {
+ protected Event handleSharedObjectMsgEvent(ISharedObjectMessageEvent event) {
trace("handleSharedObjectMsgEvent("+event+")");
return event;
}
diff --git a/framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/SharedObjectMsgEventProcessor.java b/framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/SharedObjectMsgEventProcessor.java
index 511e7ac63..ab0e6f69e 100644
--- a/framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/SharedObjectMsgEventProcessor.java
+++ b/framework/bundles/org.eclipse.ecf/src/org/eclipse/ecf/core/sharedobject/SharedObjectMsgEventProcessor.java
@@ -11,6 +11,7 @@
package org.eclipse.ecf.core.sharedobject;
+import org.eclipse.ecf.core.events.ISharedObjectMessageEvent;
import org.eclipse.ecf.core.util.Event;
import org.eclipse.ecf.core.util.IEventProcessor;
@@ -27,15 +28,15 @@ public class SharedObjectMsgEventProcessor implements IEventProcessor {
this.sharedObject = sharedObject;
}
public boolean acceptEvent(Event event) {
- return (event instanceof SharedObjectMsgEvent);
+ return (event instanceof ISharedObjectMessageEvent);
}
public Event processEvent(Event event) {
- if (!(event instanceof SharedObjectMsgEvent)) {
+ if (!(event instanceof ISharedObjectMessageEvent)) {
return event;
}
- return processSharedObjectMsgEvent((SharedObjectMsgEvent) event);
+ return processSharedObjectMsgEvent((ISharedObjectMessageEvent) event);
}
- protected Event processSharedObjectMsgEvent(SharedObjectMsgEvent event) {
+ protected Event processSharedObjectMsgEvent(ISharedObjectMessageEvent event) {
return sharedObject.handleSharedObjectMsgEvent(event);
}
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/META-INF/MANIFEST.MF b/providers/bundles/org.eclipse.ecf.provider.xmpp/META-INF/MANIFEST.MF
index 506f3f6c0..af99dc087 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/META-INF/MANIFEST.MF
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/META-INF/MANIFEST.MF
@@ -13,3 +13,5 @@ Require-Bundle: org.eclipse.core.runtime,
org.jivesoftware.smack
Eclipse-AutoStart: true
Export-Package: org.eclipse.ecf.provider.xmpp.container, org.eclipse.ecf.provider.xmpp.identity
+Eclipse-RegisterBuddy: org.eclipse.ecf
+Eclipse-BuddyPolicy: dependent
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java
index 126ed9be2..659b061cc 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java
@@ -139,17 +139,17 @@ public class XMPPClientSOContainer extends ClientSOContainer {
XMPPRoomID roomID = null;
if (toID instanceof XMPPRoomID) {
roomID = (XMPPRoomID) toID;
- }
- String mucname = roomID.getMucString();
- for(Iterator i=chats.iterator(); i.hasNext(); ) {
- IChatRoomContainer cont = (IChatRoomContainer) i.next();
- if (cont == null) continue;
- ID tid = cont.getConnectedID();
- if (tid != null && tid instanceof XMPPRoomID) {
- XMPPRoomID targetID = (XMPPRoomID) tid;
- String tmuc = targetID.getMucString();
- if (tmuc.equals(mucname)) {
- return cont;
+ String mucname = roomID.getMucString();
+ for(Iterator i=chats.iterator(); i.hasNext(); ) {
+ IChatRoomContainer cont = (IChatRoomContainer) i.next();
+ if (cont == null) continue;
+ ID tid = cont.getConnectedID();
+ if (tid != null && tid instanceof XMPPRoomID) {
+ XMPPRoomID targetID = (XMPPRoomID) tid;
+ String tmuc = targetID.getMucString();
+ if (tmuc.equals(mucname)) {
+ return cont;
+ }
}
}
}

Back to the top