Issue #427 fixed issues

Change-Id: I984b6ccefd84e90d0296e1b38b8dd30b241546f8

Former-commit-id: 14c2b1271e [formerly 64e3f77ac8ebc03c0e15c3d4ac513df78f05b00a]
Former-commit-id: db3027c0d6
This commit is contained in:
Nate Jensen 2012-06-08 16:10:57 -05:00
parent 8d741bc4a1
commit 1b03a14b23
7 changed files with 79 additions and 164 deletions

View file

@ -458,7 +458,7 @@ public class CollaborationConnection implements IEventPublisher {
* @param session
*/
protected void removeSession(ISession session) {
sessions.remove(session);
sessions.remove(session.getSessionId());
}
/**
@ -544,14 +544,7 @@ public class CollaborationConnection implements IEventPublisher {
});
}
// ***************************
// Peer to Peer communications
// ***************************
/**
*
*/
protected ISession getSession(String sessionId) {
public ISession getSession(String sessionId) {
return sessions.get(sessionId);
}
@ -674,6 +667,10 @@ public class CollaborationConnection implements IEventPublisher {
return id;
}
public Collection<ISession> getSessions() {
return sessions.values();
}
/**
* Returns the currently connected connection or null if it's not connected
*
@ -707,4 +704,5 @@ public class CollaborationConnection implements IEventPublisher {
return getConnection();
}
}
}

View file

@ -26,17 +26,18 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.ecf.core.user.User;
import org.eclipse.ecf.presence.IPresence;
import org.eclipse.ecf.presence.IPresence.Mode;
import org.eclipse.ecf.presence.IPresence.Type;
import org.eclipse.ecf.presence.Presence;
import org.eclipse.ecf.presence.roster.IRoster;
import org.eclipse.ecf.presence.roster.IRosterEntry;
import org.eclipse.ecf.presence.roster.IRosterGroup;
import org.eclipse.ecf.presence.roster.IRosterItem;
import org.eclipse.ecf.presence.roster.IRosterManager;
import org.eclipse.ecf.presence.roster.RosterEntry;
import org.eclipse.ecf.presence.roster.RosterGroup;
import org.eclipse.jface.action.Action;
@ -228,7 +229,6 @@ public class CollaborationGroupView extends CaveFloatingView implements
}
LoginDialog dlg = new LoginDialog(shell);
dlg.open();
dlg.close();
}
});
connection = CollaborationConnection.getConnection();
@ -379,8 +379,8 @@ public class CollaborationGroupView extends CaveFloatingView implements
@Override
public void run() {
String sessionId = getId();
IVenueSession session = CollaborationDataManager.getInstance()
.getSession(sessionId);
IVenueSession session = (IVenueSession) CollaborationConnection
.getConnection().getSession(sessionId);
List<UserId> ids = new ArrayList<UserId>();
for (IRosterEntry user : getSelectedUsers()) {
@ -746,7 +746,8 @@ public class CollaborationGroupView extends CaveFloatingView implements
IViewPart viewPart = ref.getView(false);
if (viewPart instanceof SessionView) {
String sessionId = viewPart.getViewSite().getSecondaryId();
activeSessionGroup.addObject(manager.getSession(sessionId));
activeSessionGroup.addObject(CollaborationConnection
.getConnection().getSession(sessionId));
}
}
} catch (NullPointerException e) {
@ -819,13 +820,12 @@ public class CollaborationGroupView extends CaveFloatingView implements
&& user.getPresence().getType() == Type.AVAILABLE) {
MenuManager inviteManager = new MenuManager("Invite to...");
// get current open chats
Map<String, IVenueSession> sessions = CollaborationDataManager
.getInstance().getSessions();
for (String name : sessions.keySet()) {
final ISession session = sessions.get(name);
if (session != null) {
final IVenueInfo info = sessions.get(name).getVenue()
.getInfo();
Collection<ISession> sessions = CollaborationConnection
.getConnection().getSessions();
for (final ISession session : sessions) {
if (session != null && session instanceof IVenueSession) {
final IVenueInfo info = ((IVenueSession) session)
.getVenue().getInfo();
if (info != null) {
Action action = new Action(
info.getVenueDescription()) {
@ -1026,7 +1026,21 @@ public class CollaborationGroupView extends CaveFloatingView implements
.getString(CollabPrefConstants.P_STATUS).toLowerCase());
String msg = Activator.getDefault().getPreferenceStore()
.getString(CollabPrefConstants.P_MESSAGE);
CollaborationDataManager.getInstance().fireModifiedPresence(mode, msg);
CollaborationConnection connection = CollaborationConnection
.getConnection();
IRosterManager manager = connection.getRosterManager();
IPresence presence = new Presence(Type.AVAILABLE, msg, mode);
try {
connection.getAccountManager().sendPresence(presence);
UserId id = connection.getUser();
RosterEntry rosterEntry = new RosterEntry(manager.getRoster(), id,
presence);
rosterEntry.setPresence(presence);
connection.getEventPublisher().post(rosterEntry);
} catch (CollaborationException e) {
statusHandler.handle(Priority.PROBLEM, "Error sending presence", e);
}
// need to refresh the local tree so that the top user shows up with the
// current status
@ -1057,8 +1071,8 @@ public class CollaborationGroupView extends CaveFloatingView implements
try {
if (result.isInviteUsers()) {
IVenueSession session = CollaborationDataManager
.getInstance().getSession(result.getSessionId());
IVenueSession session = (IVenueSession) CollaborationConnection
.getConnection().getSession(result.getSessionId());
List<UserId> usersList = new ArrayList<UserId>();
for (IRosterEntry user : getSelectedUsers()) {
usersList.add(IDConverter.convertFrom(user.getUser()));
@ -1535,7 +1549,7 @@ public class CollaborationGroupView extends CaveFloatingView implements
if (part instanceof SessionView) {
SessionView sessionView = (SessionView) part;
String sessionId = sessionView.getViewSite().getSecondaryId();
IVenueSession session = CollaborationDataManager.getInstance()
ISession session = CollaborationConnection.getConnection()
.getSession(sessionId);
activeSessionGroup.addObject(session);
session.registerEventHandler(sessionView);

View file

@ -48,7 +48,6 @@ import com.raytheon.uf.viz.collaboration.comm.identity.user.SharedDisplayRole;
import com.raytheon.uf.viz.collaboration.comm.provider.TextMessage;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.ui.data.CollaborationDataManager;
import com.raytheon.uf.viz.collaboration.ui.data.SharedDisplaySessionMgr;
import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants;
import com.raytheon.uf.viz.collaboration.ui.session.CollaborationSessionView;
@ -57,7 +56,8 @@ import com.raytheon.uf.viz.collaboration.ui.session.SessionView;
import com.raytheon.uf.viz.core.VizApp;
/**
* TODO Add Description
* Subscribes to events that occur on the collaboration connection, ie the
* logged in user. This is for events not tied to a particular session.
*
* <pre>
*
@ -86,6 +86,12 @@ public class ConnectionSubscriber {
}
/**
* Subscribes to events on the given connection. Should only be called on
* login.
*
* @param connection
*/
public static void subscribe(CollaborationConnection connection) {
if (instance == null) {
instance = new ConnectionSubscriber();
@ -93,6 +99,12 @@ public class ConnectionSubscriber {
}
}
/**
* Unsubscribes from events on the given connection. Should only be called
* on logout.
*
* @param connection
*/
public static void unsubscribe(CollaborationConnection connection) {
if (instance != null) {
instance.dispose(connection);
@ -187,8 +199,6 @@ public class ConnectionSubscriber {
IVenueSession session = connection
.joinCollaborationVenue(invitation);
String sessionId = session.getSessionId();
CollaborationDataManager.getInstance().addSession(
sessionId, session);
if (sharedDisplay) {
ISharedDisplaySession displaySession = (ISharedDisplaySession) session;
SessionColorManager man = new SessionColorManager();

View file

@ -19,28 +19,11 @@
**/
package com.raytheon.uf.viz.collaboration.ui.data;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.ecf.presence.IPresence;
import org.eclipse.ecf.presence.IPresence.Mode;
import org.eclipse.ecf.presence.IPresence.Type;
import org.eclipse.ecf.presence.Presence;
import org.eclipse.ecf.presence.roster.IRosterManager;
import org.eclipse.ecf.presence.roster.RosterEntry;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchListener;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
import com.raytheon.uf.viz.collaboration.comm.identity.ISharedDisplaySession;
import com.raytheon.uf.viz.collaboration.comm.identity.IVenueSession;
import com.raytheon.uf.viz.collaboration.comm.identity.user.SharedDisplayRole;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
/**
* A single class that contains all data information.
@ -61,27 +44,6 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
public class CollaborationDataManager {
private static CollaborationDataManager instance;
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(CollaborationDataManager.class);
/**
* The connection to the server.
*/
private CollaborationConnection connection;
Shell shell;
/**
* Created when connection made. Used to clean up connection when CAVE shuts
* down.
*/
private IWorkbenchListener wbListener;
/**
* Mapping for all active chat sessions.
*/
Map<String, IVenueSession> sessionsMap;
public static CollaborationDataManager getInstance() {
if (instance == null) {
instance = new CollaborationDataManager();
@ -93,47 +55,6 @@ public class CollaborationDataManager {
* Private constructor to for singleton class.
*/
private CollaborationDataManager() {
sessionsMap = new HashMap<String, IVenueSession>();
}
/**
* Get the Venue session associated with the key or any session when key is
* null.
*
* @param sessionId
* - key to fetch session
* @return session - The venue session or null if none found
*/
public IVenueSession getSession(String sessionId) {
Assert.isNotNull(sessionId,
"getSession should never be passed a null sessionId");
// IVenueSession session = null;
// if (sessionId == null) {
// if (sessionsMap.size() > 0) {
// session = sessionsMap.get(sessionsMap.keySet().toArray()[0]);
// }
// } else {
// session = sessionsMap.get(sessionId);
// }
// return session;
return sessionsMap.get(sessionId);
}
public Map<String, IVenueSession> getSessions() {
return sessionsMap;
}
/**
* Closes connection to the session.
*
* @param sessionId
*/
public void closeSession(String sessionId) {
IVenueSession session = sessionsMap.get(sessionId);
if (session != null) {
sessionsMap.remove(sessionId);
session.close();
}
}
/**
@ -160,7 +81,6 @@ public class CollaborationDataManager {
// TODO throw an exception if unable to make connection?
if (session.isConnected()) {
ISharedDisplaySession displaySession = (ISharedDisplaySession) session;
sessionsMap.put(sessionId, session);
SharedDisplaySessionMgr.joinSession(displaySession,
SharedDisplayRole.DATA_PROVIDER, null);
}
@ -177,38 +97,8 @@ public class CollaborationDataManager {
session = connection.createTextOnlyVenue(venueName, subject);
if (session.isConnected()) {
sessionId = session.getSessionId();
sessionsMap.put(sessionId, session);
}
return sessionId;
}
public boolean isConnected() {
return connection != null && connection.isConnected();
}
public void fireModifiedPresence(Mode mode, String msg) {
IRosterManager manager = connection.getRosterManager();
IPresence presence = new Presence(Type.AVAILABLE, msg, mode);
try {
connection.getAccountManager().sendPresence(presence);
UserId id = connection.getUser();
RosterEntry rosterEntry = new RosterEntry(manager.getRoster(), id,
presence);
rosterEntry.setPresence(presence);
connection.getEventPublisher().post(rosterEntry);
} catch (CollaborationException e) {
// TODO Auto-generated catch block. Please revise as
// appropriate.
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// TODO remove as this is temporary to fix a problem and get in a good state
public void addSession(String sessionId, IVenueSession session) {
sessionsMap.put(sessionId, session);
}
}

View file

@ -58,7 +58,6 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.ColorChangeEvent;
import com.raytheon.uf.viz.collaboration.ui.data.CollaborationDataManager;
import com.raytheon.uf.viz.collaboration.ui.data.SessionContainer;
import com.raytheon.uf.viz.collaboration.ui.data.SharedDisplaySessionMgr;
import com.raytheon.uf.viz.collaboration.ui.telestrator.CollaborationDrawingResource;
@ -468,8 +467,8 @@ public class CollaborationSessionView extends SessionView implements
@Override
protected void setSession(String sessionId) {
super.setSession(sessionId);
this.session = (ISharedDisplaySession) CollaborationDataManager
.getInstance().getSession(this.sessionId);
this.session = (ISharedDisplaySession) CollaborationConnection
.getConnection().getSession(sessionId);
}
public String getSessionId() {
@ -479,6 +478,7 @@ public class CollaborationSessionView extends SessionView implements
@Override
public void dispose() {
SharedDisplaySessionMgr.exitSession(session.getSessionId());
session.close();
super.dispose();
getSite().getPage().removePartListener(this);
}

View file

@ -37,13 +37,14 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import com.raytheon.uf.viz.collaboration.comm.identity.ISession;
import com.raytheon.uf.viz.collaboration.comm.identity.IVenueSession;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.session.SharedDisplaySession;
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.ui.CollaborationUtils;
import com.raytheon.uf.viz.collaboration.ui.SessionColorManager;
import com.raytheon.uf.viz.collaboration.ui.data.CollaborationDataManager;
/**
* Generate the Participant's label and icon image.
@ -128,8 +129,8 @@ public class ParticipantsLabelProvider extends ColumnLabelProvider {
@Override
public Image getImage(Object element) {
IVenueSession session = CollaborationDataManager.getInstance()
.getSession(sessionId);
IVenueSession session = (IVenueSession) CollaborationConnection
.getConnection().getSession(sessionId);
if (session == null) {
return null;
@ -218,8 +219,8 @@ public class ParticipantsLabelProvider extends ColumnLabelProvider {
@Override
public Font getFont(Object element) {
IRosterEntry user = (IRosterEntry) element;
IVenueSession session = CollaborationDataManager.getInstance()
.getSession(sessionId);
ISession session = CollaborationConnection.getConnection().getSession(
sessionId);
if (session instanceof SharedDisplaySession) {
UserId id = IDConverter.convertFrom(user.getUser());
boolean isSessionLeader = id
@ -346,8 +347,8 @@ public class ParticipantsLabelProvider extends ColumnLabelProvider {
.getMode())).append("\n");
builder.append("Message : \"").append(user.getPresence().getStatus())
.append("\"");
IVenueSession session = CollaborationDataManager.getInstance()
.getSession(sessionId);
ISession session = CollaborationConnection.getConnection().getSession(
sessionId);
if (session instanceof SharedDisplaySession) {
UserId id = IDConverter.convertFrom(user.getUser());
boolean isSessionLeader = id

View file

@ -75,7 +75,6 @@ import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConn
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.ui.SessionColorManager;
import com.raytheon.uf.viz.collaboration.ui.data.CollaborationDataManager;
import com.raytheon.uf.viz.core.VizApp;
/**
@ -411,8 +410,7 @@ public class SessionView extends AbstractSessionView {
// clean up event handlers
session.unRegisterEventHandler(this);
CollaborationDataManager mgr = CollaborationDataManager.getInstance();
mgr.closeSession(sessionId);
session.close();
CollaborationConnection conn = CollaborationConnection.getConnection();
if (conn != null) {
conn.getEventPublisher().unregister(this);
@ -595,8 +593,8 @@ public class SessionView extends AbstractSessionView {
protected void setSession(String sessionId) {
this.sessionId = sessionId;
this.session = CollaborationDataManager.getInstance().getSession(
this.sessionId);
this.session = (IVenueSession) CollaborationConnection.getConnection()
.getSession(this.sessionId);
}
@Subscribe
@ -664,18 +662,22 @@ public class SessionView extends AbstractSessionView {
@SuppressWarnings("unchecked")
private void participantDeparted(UserId participant) {
List<IRosterEntry> users = (List<IRosterEntry>) usersTable.getInput();
for (int i = 0; i < users.size(); ++i) {
UserId otherId = IDConverter.convertFrom(users.get(i).getUser());
if (users.get(i) == null
|| participant.getName().equals(otherId.getName())) {
users.remove(i);
usersTable.refresh();
break;
if (users != null) {
for (int i = 0; i < users.size(); ++i) {
UserId otherId = IDConverter
.convertFrom(users.get(i).getUser());
if (users.get(i) == null
|| participant.getName().equals(otherId.getName())) {
users.remove(i);
usersTable.refresh();
break;
}
}
StringBuilder builder = new StringBuilder(participant.getName()
+ " has left the room");
sendSystemMessage(builder);
}
StringBuilder builder = new StringBuilder(participant.getName()
+ " has left the room");
sendSystemMessage(builder);
}
/**