Issue #2903 made xmpp reconnect an explicit action by user

moved non-session classes out of session package
connection classes moved to connection package
made separate classes for connection listeners
removed password from heap
login dialog remembers last server used
added reconnect handler to prompt user to re-login after disconnect


Former-commit-id: 8ab1bab974 [formerly 762e7d3a1ff47f794aa843d2b159ac78b4ab12a3]
Former-commit-id: 6b22374046
This commit is contained in:
Brian Clements 2014-04-07 10:15:49 -05:00 committed by Gerrit Code Review
parent cf3e9e9020
commit 7cf5f06f2a
69 changed files with 945 additions and 542 deletions

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Collaboratioin
Bundle-SymbolicName: com.raytheon.uf.viz.collaboration.comm;singleton:=true
Bundle-Version: 1.13.0.qualifier
Bundle-Version: 1.14.0.qualifier
Bundle-Activator: com.raytheon.uf.viz.collaboration.comm.Activator
Bundle-Vendor: RAYTHEON
Eclipse-RegisterBuddy: com.raytheon.uf.viz.core
@ -32,6 +32,8 @@ Export-Package: com.raytheon.uf.viz.collaboration.comm,
com.raytheon.uf.viz.collaboration.comm.identity.user,
com.raytheon.uf.viz.collaboration.comm.packet,
com.raytheon.uf.viz.collaboration.comm.provider,
com.raytheon.uf.viz.collaboration.comm.provider.account,
com.raytheon.uf.viz.collaboration.comm.provider.connection,
com.raytheon.uf.viz.collaboration.comm.provider.event,
com.raytheon.uf.viz.collaboration.comm.provider.info,
com.raytheon.uf.viz.collaboration.comm.provider.session,

View file

@ -40,7 +40,7 @@ package com.raytheon.uf.viz.collaboration.comm.identity;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IEventPublisher;
import com.raytheon.uf.viz.collaboration.comm.identity.user.IUser;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
/**
* Base interface for sessions in which the client is interacting with others on

View file

@ -19,7 +19,7 @@
**/
package com.raytheon.uf.viz.collaboration.comm.identity.roster;
import com.raytheon.uf.viz.collaboration.comm.provider.session.ISubscriptionRequestCompleteAction;
import com.raytheon.uf.viz.collaboration.comm.provider.account.ISubscriptionRequestCompleteAction;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
/**

View file

@ -17,7 +17,7 @@
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.session;
package com.raytheon.uf.viz.collaboration.comm.provider.account;
import java.util.Arrays;
import java.util.Map;
@ -34,6 +34,7 @@ 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.identity.roster.ISubscriptionResponder;
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.UserPresenceChangedEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
@ -60,6 +61,7 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
* Feb 12, 2014 2797 bclement added protective copy to sendPresence
* Feb 13, 2014 2755 bclement added user input for which group to add contact to
* Apr 07, 2014 2785 mpduff Moved PacketListener implementation to its own class
* Apr 14, 2014 2903 bclement moved from session subpackage to account, made constructor public
*
* </pre>
*
@ -81,7 +83,7 @@ public class AccountManager implements IAccountManager {
*
* @param adapter
*/
AccountManager(CollaborationConnection manager) {
public AccountManager(CollaborationConnection manager) {
sessionManager = manager;
subscriptionEventListener = new SubscriptionPacketListener(
sessionManager);

View file

@ -17,7 +17,7 @@
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.session;
package com.raytheon.uf.viz.collaboration.comm.provider.account;
import java.net.URI;
import java.security.GeneralSecurityException;
@ -50,6 +50,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Feb 24, 2014 2756 bclement Initial creation
* Apr 14, 2014 2903 bclement moved from session subpackage to account
*
* </pre>
*

View file

@ -17,7 +17,7 @@
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.session;
package com.raytheon.uf.viz.collaboration.comm.provider.account;
import com.raytheon.uf.viz.collaboration.comm.identity.roster.SubscriptionResponse;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
@ -32,6 +32,7 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 04, 2014 2785 mpduff Initial creation
* Apr 14, 2014 2903 bclement moved from session subpackage to account
*
* </pre>
*

View file

@ -17,7 +17,7 @@
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.session;
package com.raytheon.uf.viz.collaboration.comm.provider.account;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.RosterEntry;
@ -32,6 +32,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.event.IRosterChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
import com.raytheon.uf.viz.collaboration.comm.identity.roster.ISubscriptionResponder;
import com.raytheon.uf.viz.collaboration.comm.identity.roster.SubscriptionResponse;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.RosterChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
@ -49,6 +50,7 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 04, 2014 2785 mpduff Initial creation
* Apr 14, 2014 2903 bclement moved from session subpackage to account
*
* </pre>
*

View file

@ -17,30 +17,21 @@
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.session;
package com.raytheon.uf.viz.collaboration.comm.provider.connection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.lang.StringUtils;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.StreamError;
import org.jivesoftware.smack.packet.XMPPError;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smackx.muc.InvitationListener;
import org.jivesoftware.smackx.muc.MultiUserChat;
import com.google.common.eventbus.EventBus;
@ -54,24 +45,20 @@ import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
import com.raytheon.uf.viz.collaboration.comm.identity.IAccountManager;
import com.raytheon.uf.viz.collaboration.comm.identity.ISession;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IEventPublisher;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IRosterChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IVenueInvitationEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
import com.raytheon.uf.viz.collaboration.comm.identity.invite.SharedDisplayVenueInvite;
import com.raytheon.uf.viz.collaboration.comm.identity.invite.VenueInvite;
import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayload;
import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayload.PayloadType;
import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayloadProvider;
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.event.RosterChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.event.ServerDisconnectEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.event.VenueInvitationEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.account.AccountManager;
import com.raytheon.uf.viz.collaboration.comm.provider.account.ClientAuthManager;
import com.raytheon.uf.viz.collaboration.comm.provider.event.VenueUserEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CreateSessionData;
import com.raytheon.uf.viz.collaboration.comm.provider.session.PeerToPeerChat;
import com.raytheon.uf.viz.collaboration.comm.provider.session.SharedDisplaySession;
import com.raytheon.uf.viz.collaboration.comm.provider.session.VenueSession;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
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.comm.provider.user.UserSearch;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;
/**
@ -119,6 +106,8 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;
* changed session map to a concurrent hash map
* Apr 07, 2014 2785 mpduff Changed the order of startup, sets up listeners before actually connecting.
* Apr 09, 2014 2785 mpduff Throw error when not connected and the connection should exist.
* Apr 14, 2014 2903 bclement moved from session subpackage to connection, removed password from memory,
* moved listeners to own classes, reworked connect/register listeners/login order
*
* </pre>
*
@ -140,13 +129,11 @@ public class CollaborationConnection implements IEventPublisher {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(CollaborationConnection.class);
private static CollaborationConnection instance = null;
private static volatile CollaborationConnection instance = null;
private static Map<CollaborationConnectionData, CollaborationConnection> instanceMap = new HashMap<CollaborationConnectionData, CollaborationConnection>();
private final Map<String, ISession> sessions;
private Map<String, ISession> sessions;
private UserId user;
private final UserId user;
private Presence userPresence;
@ -154,7 +141,7 @@ public class CollaborationConnection implements IEventPublisher {
private IAccountManager accountManager = null;
private EventBus eventBus;
private final EventBus eventBus;
private ContactsManager contactsMgr;
@ -162,6 +149,8 @@ public class CollaborationConnection implements IEventPublisher {
private XMPPConnection connection;
private final ConnectionConfiguration smackConfig;
private ClientAuthManager authManager;
private static boolean COMPRESS = true;
@ -178,59 +167,127 @@ public class CollaborationConnection implements IEventPublisher {
}
}
/**
* Returns the currently connected connection or null if it's not connected
*
* @return
*/
public static CollaborationConnection getConnection() {
return instance;
}
/**
* Create a {@link CollaborationConnection} given the
* {@link CollaborationConnectionData}
*
* @param userData
* @return
* @throws CollaborationException
*/
public static CollaborationConnection createConnection(
CollaborationConnectionData userData) throws CollaborationException {
synchronized (CollaborationConnection.class) {
if (instance == null) {
instance = new CollaborationConnection(userData);
} else {
throw new CollaborationException("Already connected");
}
}
return getConnection();
}
private CollaborationConnection(CollaborationConnectionData connectionData)
throws CollaborationException {
this.connectionData = connectionData;
init();
}
/**
* Initialize this object.
*/
private void init() throws CollaborationException {
eventBus = new EventBus();
sessions = new ConcurrentHashMap<String, ISession>();
HostAndPort hnp = HostAndPort.fromString(connectionData.getServer());
ConnectionConfiguration conConfig;
if (hnp.hasPort()) {
conConfig = new ConnectionConfiguration(hnp.getHostText(),
hnp.getPort());
} else {
conConfig = new ConnectionConfiguration(hnp.getHostText());
}
conConfig.setCompressionEnabled(COMPRESS);
connection = new XMPPConnection(conConfig);
accountManager = new AccountManager(this);
this.eventBus = new EventBus();
this.sessions = new ConcurrentHashMap<String, ISession>();
this.smackConfig = createSmackConfiguration(connectionData);
/* connects to XMPP server, but doesn't log in */
this.connection = createXmppConnection(smackConfig);
/* create managers and listeners before login */
this.accountManager = new AccountManager(this);
this.user = new UserId(connectionData.getUserName(),
connection.getServiceName());
setupInternalConnectionListeners();
getPeerToPeerSession();
instanceMap.put(connectionData, this);
if (instance == null) {
instance = this;
}
this.chatInstance = initPeerToPeerSession();
this.contactsMgr = new ContactsManager(this, this.getXmppConnection());
registerEventHandler(this.contactsMgr);
MultiUserChat.addInvitationListener(connection,
new SessionInviteListener(this));
PeerToPeerCommHelper helper = new PeerToPeerCommHelper(this);
this.connection.addPacketListener(helper, new PacketTypeFilter(
Message.class));
this.connection.addConnectionListener(new XmppConnectionListener(this));
/* login called externally */
}
/**
* connect to XMPP server and login
* Create smack xmpp configuration object from collaboration connection
* options
*
* @param connectionData
* @return
*/
private static ConnectionConfiguration createSmackConfiguration(
CollaborationConnectionData connectionData) {
ConnectionConfiguration rval;
HostAndPort hnp = HostAndPort.fromString(connectionData.getServer());
if (hnp.hasPort()) {
rval = new ConnectionConfiguration(hnp.getHostText(), hnp.getPort());
} else {
rval = new ConnectionConfiguration(hnp.getHostText());
}
rval.setCompressionEnabled(COMPRESS);
rval.setReconnectionAllowed(false);
return rval;
}
/**
* Create xmpp connection object and connect. This method does not login
*
* @param config
* @return
* @throws CollaborationException
*/
private static XMPPConnection createXmppConnection(
ConnectionConfiguration config) throws CollaborationException {
XMPPConnection rval = new XMPPConnection(config);
try {
rval.connect();
} catch (XMPPException e) {
throw new CollaborationException(
"Problem establishing connection to XMPP server", e);
}
return rval;
}
/**
* Login to the XMPP server. This needs to be called after the
* CollaborationConnection has been created and initialized.
*
* @param password
* @throws CollaborationException
*/
public void login(String password) throws CollaborationException {
loginInternal(connectionData.getUserName(), password);
/* auth needs to be logged in to register public key */
authManager = new ClientAuthManager(getXmppConnection());
}
/**
* login to XMPP server
*
* @param username
* @param password
* @throws CollaborationException
*/
private void connectInternal(String username, String password)
private void loginInternal(String username, String password)
throws CollaborationException {
try {
connection.connect();
connection.login(username, password);
} catch (XMPPException e) {
closeInternals();
close();
// get a nice reason for the user
String msg;
XMPPError xmppErr = e.getXMPPError();
@ -252,9 +309,15 @@ public class CollaborationConnection implements IEventPublisher {
msg = e.getLocalizedMessage();
}
throw new CollaborationException("Login failed: " + msg, e);
} finally {
/* remove password from smack */
SmackConfigScrubber.scrubConfig(smackConfig);
}
}
/**
* @return login data used to create this connection
*/
public CollaborationConnectionData getConnectionData() {
return connectionData;
}
@ -292,18 +355,25 @@ public class CollaborationConnection implements IEventPublisher {
}
/**
* Is this SessionManager currently connected?
* Is this client currently connected to the XMPP server?
*
* @return Is this SessionManager currently connected?
* @return
*/
public boolean isConnected() {
return ((connection != null) && (connection.getConnectionID() != null));
return connection != null && connection.isConnected();
}
private void closeInternals() {
/**
* close any open sessions and disconnect from XMPP server
*/
public void close() {
// Close any created sessions.
for (Entry<String, ISession> entry : sessions.entrySet()) {
entry.getValue().close();
}
sessions.clear();
chatInstance = null;
if (connection != null) {
chatInstance = null;
// Get rid of the account and roster managers
if (connection.isConnected()) {
connection.disconnect();
@ -311,31 +381,11 @@ public class CollaborationConnection implements IEventPublisher {
connection = null;
}
PeerToPeerCommHelper.reset();
instanceMap.remove(connectionData);
if (this == instance) {
instance = null;
}
}
/**
*
*/
public void close() {
if (connection != null) {
// Close any created sessions.
Collection<ISession> toRemove = sessions.values();
sessions.clear();
for (ISession session : toRemove) {
if ((chatInstance != null) && chatInstance.equals(session)) {
chatInstance.close();
chatInstance = null;
} else {
session.close();
}
synchronized (CollaborationConnection.class) {
if (this == instance) {
instance = null;
}
chatInstance = null;
}
closeInternals();
}
/**
@ -345,14 +395,23 @@ public class CollaborationConnection implements IEventPublisher {
* @throws CollaborationException
*/
public ISession getPeerToPeerSession() throws CollaborationException {
if (chatInstance == null) {
chatInstance = new PeerToPeerChat(eventBus, this);
sessions.put(chatInstance.getSessionId(), chatInstance);
postEvent(chatInstance);
}
return chatInstance;
}
/**
* Create and initialize peer to peer chat session object.
*
* @return
* @throws CollaborationException
*/
private PeerToPeerChat initPeerToPeerSession()
throws CollaborationException {
PeerToPeerChat rval = new PeerToPeerChat(eventBus, this);
sessions.put(rval.getSessionId(), rval);
postEvent(rval);
return rval;
}
/**
* Create shared display venue object. This does not create the venue on the
* server. The session should be unregistered when no longer active using
@ -450,6 +509,7 @@ public class CollaborationConnection implements IEventPublisher {
}
/**
* unregister session with connection and notify UI elements
*
* @param session
*/
@ -458,227 +518,16 @@ public class CollaborationConnection implements IEventPublisher {
postEvent(session);
}
// ***************************
// Connection listener
// ***************************
/**
* Get registered session
*
* @param sessionId
* @return
*/
private void setupInternalConnectionListeners() {
final Roster roster = connection.getRoster();
roster.addRosterListener(new RosterListener() {
@Override
public void presenceChanged(Presence presence) {
String fromId = presence.getFrom();
if (contactsMgr != null) {
UserId u = IDConverter.convertFrom(fromId);
if (u != null) {
RosterEntry entry = contactsMgr.getRosterEntry(u);
eventBus.post(entry);
IRosterChangeEvent event = new RosterChangeEvent(
RosterChangeType.PRESENCE, entry, presence);
eventBus.post(event);
}
}
}
@Override
public void entriesUpdated(Collection<String> addresses) {
send(addresses, RosterChangeType.MODIFY);
}
@Override
public void entriesDeleted(Collection<String> addresses) {
send(addresses, RosterChangeType.DELETE);
}
@Override
public void entriesAdded(Collection<String> addresses) {
send(addresses, RosterChangeType.ADD);
}
/**
* Send event bus notification for roster
*
* @param addresses
* @param type
*/
private void send(Collection<String> addresses,
RosterChangeType type) {
for (String addy : addresses) {
RosterEntry entry = roster.getEntry(addy);
if (entry != null) {
IRosterChangeEvent event = new RosterChangeEvent(type,
entry);
eventBus.post(event);
}
}
}
});
}
public ISession getSession(String sessionId) {
return sessions.get(sessionId);
}
private void setupP2PComm() throws CollaborationException {
if (isConnected()) {
PeerToPeerCommHelper helper = new PeerToPeerCommHelper(this);
connection.addPacketListener(helper, new PacketTypeFilter(
Message.class));
} else {
throw new CollaborationException(
"The Collaboration XMPP connection has not been established.");
}
}
private void setupConnectionListener() throws CollaborationException {
if (isConnected()) {
connection.addConnectionListener(new ConnectionListener() {
@Override
public void reconnectionSuccessful() {
statusHandler
.debug("Client successfully reconnected to server");
postSystemMessageToVenues("Connection to collaboration server reestablished.");
}
@Override
public void reconnectionFailed(Exception e) {
String reason = getErrorReason(e);
statusHandler.error("Client can't reconnect to server: "
+ reason, e);
sendDisconnectNotice(reason);
}
@Override
public void reconnectingIn(int seconds) {
statusHandler.debug("Client reconnecting to server in "
+ seconds + " seconds");
}
@Override
public void connectionClosedOnError(Exception e) {
String reason = getErrorReason(e);
statusHandler.error("Server closed on error: " + reason, e);
// don't shutdown yet, we might be able to reconnect
postSystemMessageToVenues("Not currently connected to collaboration server.");
}
private String getErrorReason(Exception e) {
String msg = null;
if (e instanceof XMPPException) {
StreamError streamError = ((XMPPException) e)
.getStreamError();
if (streamError != null) {
if ("conflict".equalsIgnoreCase(streamError
.getCode())) {
msg = "User account in use on another client";
}
}
}
return msg == null ? e.getLocalizedMessage() : msg;
}
@Override
public void connectionClosed() {
statusHandler.info("Server closed connection");
sendDisconnectNotice("Normal termination");
}
private void sendDisconnectNotice(String reason) {
ServerDisconnectEvent event = new ServerDisconnectEvent(
reason);
eventBus.post(event);
}
});
} else {
throw new CollaborationException(
"The Collaboration XMPP connection has not been established.");
}
}
// ***************************
// Venue invitation listener management
// ***************************
/**
* Set up the invitation listener.
*
* @throws CollaborationException
*/
private void setupInternalVenueInvitationListener()
throws CollaborationException {
if (isConnected()) {
MultiUserChat.addInvitationListener(connection,
new InvitationListener() {
@Override
public void invitationReceived(Connection conn,
String room, String inviter, String reason,
String password, Message message) {
// TODO handle password protected rooms
VenueId venueId = new VenueId();
venueId.setName(Tools.parseName(room));
venueId.setHost(Tools.parseHost(room));
UserId invitor = IDConverter.convertFrom(inviter);
if (message != null) {
SessionPayload payload = (SessionPayload) message
.getExtension(PacketConstants.COLLAB_XMLNS);
if (payload != null) {
handleCollabInvite(venueId, invitor,
payload);
return;
}
}
if (reason != null
&& reason.startsWith(Tools.CMD_PREAMBLE)) {
reason = "Shared display invitation from incompatible version of CAVE. "
+ "Session will be chat-only if invitation is accepted";
}
handleChatRoomInvite(venueId, invitor, reason,
message);
}
});
} else {
throw new CollaborationException(
"The Collaboration XMPP connection has not been established.");
}
}
private void handleChatRoomInvite(VenueId venueId, UserId invitor,
String reason, Message message) {
VenueInvite invite = new VenueInvite();
if (!StringUtils.isBlank(reason)) {
invite.setMessage(reason);
} else if (!StringUtils.isBlank(message.getBody())) {
invite.setMessage(message.getBody());
} else {
invite.setMessage("");
}
invite.setSubject(message.getSubject());
IVenueInvitationEvent event = new VenueInvitationEvent(venueId,
invitor, invite);
eventBus.post(event);
}
private void handleCollabInvite(VenueId venueId, UserId invitor,
SessionPayload payload) {
Object obj = payload.getData();
if (obj == null
|| !payload.getPayloadType().equals(PayloadType.Invitation)
|| !(obj instanceof VenueInvite)) {
statusHandler.warn("Received unsupported invite payload");
return;
}
VenueInvite invite = (VenueInvite) obj;
IVenueInvitationEvent event = new VenueInvitationEvent(venueId,
invitor, invite);
eventBus.post(event);
}
/**
* Register an event handler with this
*
@ -712,38 +561,10 @@ public class CollaborationConnection implements IEventPublisher {
return sessions.values();
}
/**
* Returns the currently connected connection or null if it's not connected
*
* @return
*/
public static CollaborationConnection getConnection() {
return instance;
}
/**
* Create a {@link CollaborationConnection} given the
* {@link CollaborationConnectionData}
*
* @param userData
* @return
* @throws CollaborationException
*/
public static CollaborationConnection createConnection(
CollaborationConnectionData userData) throws CollaborationException {
if (instance != null) {
throw new CollaborationException("Already connected");
}
instance = new CollaborationConnection(userData);
return getConnection();
}
/**
* @return Smack connection object
*/
protected XMPPConnection getXmppConnection() {
public XMPPConnection getXmppConnection() {
return connection;
}
@ -776,23 +597,9 @@ public class CollaborationConnection implements IEventPublisher {
}
/**
* Connect to the XMPP server. This needs to be called after the
* CollaborationConnection has been created and initialized.
*
* @throws CollaborationException
* @return the statusHandler
*/
public void connect() throws CollaborationException {
contactsMgr = new ContactsManager(this, this.getXmppConnection());
registerEventHandler(instance.getContactsManager());
connectInternal(connectionData.getUserName(),
connectionData.getPassword());
authManager = new ClientAuthManager(getXmppConnection());
// Finish setup
setupInternalVenueInvitationListener();
setupP2PComm();
setupConnectionListener();
protected static IUFStatusHandler getStatusHandler() {
return statusHandler;
}
}

View file

@ -17,7 +17,7 @@
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.session;
package com.raytheon.uf.viz.collaboration.comm.provider.connection;
import java.util.HashMap;
import java.util.Map;
@ -36,6 +36,7 @@ import org.jivesoftware.smack.packet.Presence.Mode;
* ------------ ---------- ----------- --------------------------
* Jun 18, 2012 mschenke Initial creation
* Jan 15, 2014 2630 bclement connection data stores status as Mode object
* Apr 14, 2014 2903 bclement removed password, moved from session subpackage to connection
*
* </pre>
*
@ -49,8 +50,6 @@ public class CollaborationConnectionData {
private String userName;
private String password;
private Mode status;
private String message;
@ -91,21 +90,6 @@ public class CollaborationConnectionData {
this.userName = userName;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password
* the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the status
*/
@ -163,8 +147,6 @@ public class CollaborationConnectionData {
result = prime * result
+ ((attributes == null) ? 0 : attributes.hashCode());
result = prime * result + ((message == null) ? 0 : message.hashCode());
result = prime * result
+ ((password == null) ? 0 : password.hashCode());
result = prime * result + ((server == null) ? 0 : server.hashCode());
result = prime * result + ((status == null) ? 0 : status.hashCode());
result = prime * result
@ -196,11 +178,6 @@ public class CollaborationConnectionData {
return false;
} else if (!message.equals(other.message))
return false;
if (password == null) {
if (other.password != null)
return false;
} else if (!password.equals(other.password))
return false;
if (server == null) {
if (other.server != null)
return false;

View file

@ -17,7 +17,7 @@
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.session;
package com.raytheon.uf.viz.collaboration.comm.provider.connection;
import java.net.URI;
import java.net.URL;
@ -63,6 +63,7 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
* Feb 17, 2014 2756 bclement null check for message from field
* moved url validation from regex to java utility
* Feb 24, 2014 2756 bclement moved xmpp objects to new packages
* Apr 14, 2014 2903 bclement moved from session subpackage to connection
*
* </pre>
*
@ -72,8 +73,8 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
public class PeerToPeerCommHelper implements PacketListener {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(PeerToPeerCommHelper.class);
private static final transient IUFStatusHandler statusHandler = CollaborationConnection
.getStatusHandler();
private static volatile String httpServer;
@ -88,7 +89,7 @@ public class PeerToPeerCommHelper implements PacketListener {
return httpServer;
}
private CollaborationConnection manager;
private final CollaborationConnection manager;
/**
*

View file

@ -0,0 +1,149 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.connection;
import org.apache.commons.lang.StringUtils;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.muc.InvitationListener;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.xmpp.PacketConstants;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IVenueInvitationEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.invite.VenueInvite;
import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayload;
import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayload.PayloadType;
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.event.VenueInvitationEvent;
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.comm.provider.user.VenueId;
/**
* Handles incoming session invitations and routes to event bus
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 11, 2014 2903 bclement Initial creation
*
* </pre>
*
* @author bclement
* @version 1.0
*/
public class SessionInviteListener implements InvitationListener {
private static final IUFStatusHandler statusHandler = CollaborationConnection
.getStatusHandler();
private final CollaborationConnection manager;
/**
* @param manager
*/
public SessionInviteListener(CollaborationConnection manager) {
this.manager = manager;
}
/*
* (non-Javadoc)
*
* @see
* org.jivesoftware.smackx.muc.InvitationListener#invitationReceived(org
* .jivesoftware.smack.Connection, java.lang.String, java.lang.String,
* java.lang.String, java.lang.String,
* org.jivesoftware.smack.packet.Message)
*/
@Override
public void invitationReceived(Connection conn, String room,
String inviter, String reason, String password, Message message) {
// TODO handle password protected rooms
VenueId venueId = new VenueId();
venueId.setName(Tools.parseName(room));
venueId.setHost(Tools.parseHost(room));
UserId invitor = IDConverter.convertFrom(inviter);
SessionPayload payload = null;
if (message != null) {
payload = (SessionPayload) message
.getExtension(PacketConstants.COLLAB_XMLNS);
}
if (reason != null && reason.startsWith(Tools.CMD_PREAMBLE)) {
reason = "Shared display invitation from incompatible version of CAVE. "
+ "Session will be chat-only if invitation is accepted";
}
if (payload != null) {
handleCollabInvite(venueId, invitor, payload);
} else {
handleChatRoomInvite(venueId, invitor, reason, message);
}
}
/**
* Handles acceptance of a text only session invitation
*
* @param venueId
* @param invitor
* @param reason
* @param message
*/
private void handleChatRoomInvite(VenueId venueId, UserId invitor,
String reason, Message message) {
VenueInvite invite = new VenueInvite();
if (!StringUtils.isBlank(reason)) {
invite.setMessage(reason);
} else if (!StringUtils.isBlank(message.getBody())) {
invite.setMessage(message.getBody());
} else {
invite.setMessage("");
}
invite.setSubject(message.getSubject());
IVenueInvitationEvent event = new VenueInvitationEvent(venueId,
invitor, invite);
manager.postEvent(event);
}
/**
* Handles acceptance of a shared display session invitation
*
* @param venueId
* @param invitor
* @param payload
*/
private void handleCollabInvite(VenueId venueId, UserId invitor,
SessionPayload payload) {
Object obj = payload.getData();
if (obj == null
|| !payload.getPayloadType().equals(PayloadType.Invitation)
|| !(obj instanceof VenueInvite)) {
statusHandler.warn("Received unsupported invite payload");
return;
}
VenueInvite invite = (VenueInvite) obj;
IVenueInvitationEvent event = new VenueInvitationEvent(venueId,
invitor, invite);
manager.postEvent(event);
}
}

View file

@ -0,0 +1,97 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.connection;
import java.lang.reflect.Field;
import org.jivesoftware.smack.ConnectionConfiguration;
import com.raytheon.uf.common.status.IUFStatusHandler;
/**
* Sanitizes smack configuration object to keep sensitive information out of the
* heap
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 11, 2014 2903 bclement Initial creation
*
* </pre>
*
* @author bclement
* @version 1.0
*/
public class SmackConfigScrubber {
private static final IUFStatusHandler log = CollaborationConnection
.getStatusHandler();
private static volatile Field passwordField;
private static final String PASSWORD_FIELD_NAME = "password";
private SmackConfigScrubber() {
}
/**
* remove sensitive information from smack configuration
*
* @param config
*/
public static void scrubConfig(ConnectionConfiguration config) {
if (passwordField == null) {
synchronized (SmackConfigScrubber.class) {
if (passwordField == null) {
passwordField = createPasswordField();
}
}
}
if (passwordField != null) {
try {
passwordField.set(config, null);
} catch (Exception e) {
log.debug("Unable to scrub xmpp configuration: "
+ e.getLocalizedMessage());
}
}
}
/**
* Create a field object for the connection configuration class object
*
* @return null if unable to create
*/
private static Field createPasswordField() {
try {
Class<?> c = ConnectionConfiguration.class;
Field rval = c.getDeclaredField(PASSWORD_FIELD_NAME);
rval.setAccessible(true);
return rval;
} catch (Exception e) {
log.debug("Unable to access xmpp configuration: "
+ e.getLocalizedMessage());
return null;
}
}
}

View file

@ -0,0 +1,123 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.comm.provider.connection;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.StreamError;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.viz.collaboration.comm.provider.event.ServerDisconnectEvent;
/**
* Handles connection events from the XMPP server
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 11, 2014 2903 bclement Initial creation
*
* </pre>
*
* @author bclement
* @version 1.0
*/
public class XmppConnectionListener implements ConnectionListener {
private static final IUFStatusHandler statusHandler = CollaborationConnection
.getStatusHandler();
private final CollaborationConnection manager;
/**
* @param manager
*/
public XmppConnectionListener(CollaborationConnection manager) {
this.manager = manager;
}
@Override
public void reconnectionSuccessful() {
/* this will not be called since we don't allow auto reconnect */
statusHandler.debug("Client successfully reconnected to server");
manager.postSystemMessageToVenues("Connection to collaboration server reestablished.");
}
@Override
public void reconnectionFailed(Exception e) {
/* this will not be called since we don't allow auto reconnect */
String reason = getErrorReason(e);
statusHandler.error("Client can't reconnect to server: " + reason, e);
sendDisconnectNotice(reason);
}
@Override
public void reconnectingIn(int seconds) {
/* this will not be called since we don't allow auto reconnect */
statusHandler.debug("Client reconnecting to server in " + seconds
+ " seconds");
}
@Override
public void connectionClosedOnError(Exception e) {
String reason = getErrorReason(e);
statusHandler.error("Server closed on error: " + reason, e);
sendDisconnectNotice(reason);
}
/**
* Attempt to get the most meaningful message from XMPP exception
*
* @param e
* @return
*/
private String getErrorReason(Exception e) {
String msg = null;
if (e instanceof XMPPException) {
StreamError streamError = ((XMPPException) e).getStreamError();
if (streamError != null) {
if ("conflict".equalsIgnoreCase(streamError.getCode())) {
msg = "User account in use on another client";
}
}
}
return msg == null ? e.getLocalizedMessage() : msg;
}
@Override
public void connectionClosed() {
statusHandler.info("Server closed connection");
/* don't send notice for normal termination */
}
/**
* Alert event bus listeners of disconnect
*
* @param reason
*/
private void sendDisconnectNotice(String reason) {
ServerDisconnectEvent event = new ServerDisconnectEvent(reason);
manager.postEvent(event);
}
}

View file

@ -27,6 +27,7 @@ import com.google.common.eventbus.EventBus;
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
import com.raytheon.uf.viz.collaboration.comm.identity.ISession;
import com.raytheon.uf.viz.collaboration.comm.identity.user.IUser;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
/**
* Base class for chat and collaboration sessions

View file

@ -34,6 +34,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.IPeerToPeer;
import com.raytheon.uf.viz.collaboration.comm.identity.IPropertied.Property;
import com.raytheon.uf.viz.collaboration.comm.identity.user.IUser;
import com.raytheon.uf.viz.collaboration.comm.provider.TextMessage;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
/**
@ -51,6 +52,7 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
* Apr 18, 2012 njensen Cleanup
* Dec 6, 2013 2561 bclement removed ECF
* Feb 13, 2014 2751 bclement changed IQualifiedID objects to IUser
* Apr 11, 2014 2903 bclement made constructor public b/c connection code moved packages
*
* </pre>
*
@ -66,7 +68,7 @@ public class PeerToPeerChat extends BaseSession implements IPeerToPeer {
* @param externalBus
* @param manager
*/
PeerToPeerChat(EventBus externalBus,
public PeerToPeerChat(EventBus externalBus,
CollaborationConnection manager) throws CollaborationException {
super(externalBus, manager);
}

View file

@ -63,6 +63,9 @@ import com.raytheon.uf.viz.collaboration.comm.identity.user.SharedDisplayRole;
import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayload;
import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayload.PayloadType;
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.account.ClientAuthManager;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.PeerToPeerCommHelper;
import com.raytheon.uf.viz.collaboration.comm.provider.event.LeaderChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;

View file

@ -56,6 +56,7 @@ import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayload;
import com.raytheon.uf.viz.collaboration.comm.packet.SessionPayload.PayloadType;
import com.raytheon.uf.viz.collaboration.comm.provider.TextMessage;
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.UserNicknameChangedEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.event.VenueParticipantEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.event.VenueUserEvent;
@ -105,6 +106,7 @@ import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;
* Mar 07, 2014 2848 bclement added getVenueName() and hasOtherParticipants()
* moved muc close logic to closeMuc()
* handle is now set in constructor
* Apr 11, 2014 2903 bclement made constructor public b/c connection code moved packages
*
*
* </pre>
@ -145,7 +147,7 @@ public class VenueSession extends BaseSession implements IVenueSession {
* @param container
* @param eventBus
*/
protected VenueSession(EventBus externalBus,
public VenueSession(EventBus externalBus,
CollaborationConnection manager, String venueName, String handle,
String sessionId) {
super(externalBus, manager, sessionId);
@ -158,7 +160,7 @@ public class VenueSession extends BaseSession implements IVenueSession {
* @param container
* @param eventBus
*/
protected VenueSession(EventBus externalBus,
public VenueSession(EventBus externalBus,
CollaborationConnection manager, CreateSessionData data) {
super(externalBus, manager);
this.venueName = data.getName();

View file

@ -31,6 +31,7 @@ import org.apache.commons.lang.StringUtils;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
@ -47,8 +48,11 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.common.util.collections.UpdatingSet;
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IRosterChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.RosterChangeEvent;
/**
* Manage contacts from local groups and roster on server
@ -71,6 +75,7 @@ import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConn
* Jan 30, 2014 2698 bclement removed unneeded nickname changed event
* Jan 31, 2014 2700 bclement added addToRoster, fixed add to group when in roster, but blocked
* Feb 3, 2014 2699 bclement fixed assumption that username search was exact
* Apr 11, 2014 2903 bclement moved roster listener from collaboration connection to here
*
* </pre>
*
@ -83,13 +88,13 @@ public class ContactsManager {
.getHandler(ContactsManager.class);
private final CollaborationConnection connection;
private final XMPPConnection xmpp;
private final UserSearch search;
private Map<String, String> localAliases;
/**
* Cached view of shared groups list on openfire. Will only reach out to
* server if it hasn't updated in an hour. This will disable itself if there
@ -127,8 +132,61 @@ public class ContactsManager {
this.search = connection.createSearch();
localAliases = UserIdWrapper.readAliasMap();
this.xmpp = xmpp;
final Roster roster = xmpp.getRoster();
roster.addRosterListener(new RosterListener() {
@Override
public void presenceChanged(Presence presence) {
String fromId = presence.getFrom();
UserId u = IDConverter.convertFrom(fromId);
if (u != null) {
RosterEntry entry = getRosterEntry(u);
post(entry);
IRosterChangeEvent event = new RosterChangeEvent(
RosterChangeType.PRESENCE, entry, presence);
post(event);
}
}
@Override
public void entriesUpdated(Collection<String> addresses) {
send(addresses, RosterChangeType.MODIFY);
}
@Override
public void entriesDeleted(Collection<String> addresses) {
send(addresses, RosterChangeType.DELETE);
}
@Override
public void entriesAdded(Collection<String> addresses) {
send(addresses, RosterChangeType.ADD);
}
/**
* Send event bus notification for roster
*
* @param addresses
* @param type
*/
private void send(Collection<String> addresses,
RosterChangeType type) {
for (String addy : addresses) {
RosterEntry entry = roster.getEntry(addy);
if (entry != null) {
IRosterChangeEvent event = new RosterChangeEvent(type,
entry);
post(event);
}
}
}
private void post(Object event) {
ContactsManager.this.connection.postEvent(event);
}
});
}
/**
* Get groups that are managed by server. These are not modifiable from the
* client.
@ -272,19 +330,20 @@ public class ContactsManager {
*/
public void deleteFromGroup(String groupName, UserId user) {
RosterEntry entry = getRosterEntry(user);
if ( entry == null){
statusHandler.warn("Attempted to alter group for non-contact: " + user);
if (entry == null) {
statusHandler.warn("Attempted to alter group for non-contact: "
+ user);
return;
}
RosterGroup group = getRoster().getGroup(groupName);
if ( group != null){
if (group != null) {
deleteFromGroup(group, entry);
} else {
statusHandler.warn("Attempted to modify non-existent group: "
+ groupName);
}
}
/**
* Remove entry from group.
*
@ -299,12 +358,13 @@ public class ContactsManager {
}
} catch (XMPPException e) {
String msg = getGroupModInfo(e);
statusHandler.error("Problem removing entry from group: "
+ IDConverter.convertFrom(entry) + " from "
statusHandler.error(
"Problem removing entry from group: "
+ IDConverter.convertFrom(entry) + " from "
+ group.getName() + ". " + msg, e);
}
}
/**
* Attempt to get more information about group modification error. Returns
* an empty string if no extra information is found.
@ -350,8 +410,9 @@ public class ContactsManager {
public RosterGroup createGroup(String groupName) {
Roster roster = getRoster();
RosterGroup rval = roster.getGroup(groupName);
if ( rval != null){
statusHandler.debug("Attempted to create existing group: " + groupName);
if (rval != null) {
statusHandler.debug("Attempted to create existing group: "
+ groupName);
return rval;
}
rval = roster.createGroup(groupName);
@ -369,7 +430,7 @@ public class ContactsManager {
public void deleteGroup(String groupName) {
Roster roster = getRoster();
RosterGroup group = roster.getGroup(groupName);
if ( group == null){
if (group == null) {
statusHandler.warn("Attempted to delete non-existent group: "
+ groupName);
return;

View file

@ -54,8 +54,8 @@ import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.viz.collaboration.comm.compression.CompressionUtil;
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.provider.session.ClientAuthManager;
import com.raytheon.uf.viz.collaboration.comm.provider.session.PeerToPeerCommHelper;
import com.raytheon.uf.viz.collaboration.comm.provider.account.ClientAuthManager;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.PeerToPeerCommHelper;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;
import com.raytheon.uf.viz.remote.graphics.Dispatcher;
import com.raytheon.uf.viz.remote.graphics.events.AbstractDispatchingObjectEvent;

View file

@ -35,7 +35,7 @@ import org.jivesoftware.smack.packet.RosterPacket.ItemType;
import com.raytheon.uf.viz.collaboration.comm.identity.info.SiteConfigInformation;
import com.raytheon.uf.viz.collaboration.comm.identity.user.IUser;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
/**

View file

@ -37,7 +37,7 @@ import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;

View file

@ -72,6 +72,7 @@ import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WorkbenchMessages;
import org.eclipse.ui.plugin.AbstractUIPlugin;
@ -85,9 +86,8 @@ import com.google.common.eventbus.Subscribe;
import com.raytheon.uf.viz.collaboration.comm.identity.IVenueSession;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IRosterChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
import com.raytheon.uf.viz.collaboration.comm.provider.event.ServerDisconnectEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.UserPresenceChangedEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager.GroupListener;
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
@ -119,10 +119,12 @@ import com.raytheon.uf.viz.collaboration.ui.data.AlertWordWrapper;
import com.raytheon.uf.viz.collaboration.ui.data.CollaborationGroupContainer;
import com.raytheon.uf.viz.collaboration.ui.data.SessionGroupContainer;
import com.raytheon.uf.viz.collaboration.ui.notifier.NotifierTools;
import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants;
import com.raytheon.uf.viz.collaboration.ui.session.AbstractSessionView;
import com.raytheon.uf.viz.core.VizApp;
import com.raytheon.uf.viz.core.icon.IconUtil;
import com.raytheon.viz.ui.views.CaveFloatingView;
import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
/**
* This class is the main view to display the user's information and allow the
@ -149,6 +151,8 @@ import com.raytheon.viz.ui.views.CaveFloatingView;
* Mar 05, 2014 2837 bclement separate rename action for groups, added more icons
* Mar 05, 2014 2798 mpduff Add getter for displayFeedAction.
* Mar 12, 2014 2632 mpduff Force group deletes from UI if last user is removed.
* Apr 11, 2014 2903 bclement login action changes, removed server disconnect listener,
* added static utility method to show view
*
* </pre>
*
@ -227,12 +231,11 @@ public class CollaborationGroupView extends CaveFloatingView implements
CollaborationConnection connection = CollaborationConnection
.getConnection();
if (connection == null) {
new LoginAction().run();
connection = CollaborationConnection.getConnection();
if (connection == null) {
if (!new LoginAction().login()) {
// user cancelled login
return;
}
connection = CollaborationConnection.getConnection();
}
createFilterText(parent);
@ -871,7 +874,7 @@ public class CollaborationGroupView extends CaveFloatingView implements
.getActivePage().getViewReferences()) {
IViewPart viewPart = ref.getView(false);
if (viewPart instanceof AbstractSessionView) {
((AbstractSessionView) viewPart).setAlertWords(Arrays
((AbstractSessionView<?>) viewPart).setAlertWords(Arrays
.asList(words.getAlertWords()));
}
}
@ -954,24 +957,32 @@ public class CollaborationGroupView extends CaveFloatingView implements
refreshUsersTreeViewerAsync(group);
}
@Subscribe
public void serverDisconnected(final ServerDisconnectEvent e) {
if (logOut == null) {
// we aren't logged in
return;
}
VizApp.runAsync(new Runnable() {
@Override
public void run() {
logOut.closeCollaboration();
}
});
}
/**
* @return the displayFeedAction
*/
public DisplayFeedAction getDisplayFeedAction() {
return displayFeedAction;
}
/**
* @see CaveWorkbenchPageManager#showView(String)
*
* @param initFeedView
* true if feed view should be initialized like this is the first
* time the view has been opened
* @throws PartInitException
*/
public static void showView(boolean initFeedView) throws PartInitException {
CollaborationGroupView view = (CollaborationGroupView) CaveWorkbenchPageManager
.getActiveInstance().showView(ID);
if (initFeedView) {
// if autojoin is selected (to join the default room)
if (Activator.getDefault().getPreferenceStore()
.getBoolean(CollabPrefConstants.AUTO_JOIN)) {
DisplayFeedAction action = view.getDisplayFeedAction();
action.setChecked(true);
action.run();
}
}
}
}

View file

@ -40,7 +40,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.event.ITextMessageEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IVenueInvitationEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.user.IUser;
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.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.ui.actions.PeerToPeerChatAction;
import com.raytheon.uf.viz.collaboration.ui.jobs.AwayTimeOut;
@ -70,6 +70,7 @@ import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
* Feb 13, 2014 2751 bclement messages return IUser instead of IQualifiedID
* Mar 06, 2014 2848 bclement moved SharedDisplaySessionMgr.joinSession call to InviteDialog
* Apr 08, 2014 2785 mpduff removed preference listener
* Apr 11, 2014 2903 bclement added disconnect handler
*
* </pre>
*
@ -88,6 +89,8 @@ public class ConnectionSubscriber {
private final AwayTimeOut awayTimeOut = new AwayTimeOut();
private final DisconnectHandler disconnect = new DisconnectHandler();
private ConnectionSubscriber() {
}
@ -124,6 +127,7 @@ public class ConnectionSubscriber {
new SubscriptionResponderImpl(connection));
// Register handlers and events for the new sessionManager.
connection.registerEventHandler(this);
connection.registerEventHandler(disconnect);
try {
ISession p2pSession = connection.getPeerToPeerSession();
p2pSession.registerEventHandler(this);
@ -159,11 +163,14 @@ public class ConnectionSubscriber {
awayTimeOut.cancel();
try {
ISession p2pSession = connection.getPeerToPeerSession();
p2pSession.unregisterEventHandler(this);
if (p2pSession != null) {
p2pSession.unregisterEventHandler(this);
}
} catch (CollaborationException e) {
statusHandler.handle(Priority.PROBLEM,
"Error unregistering peer to peer handler", e);
}
connection.unregisterEventHandler(disconnect);
connection.unregisterEventHandler(this);
}
PlatformUI.getWorkbench().removeWorkbenchListener(wbListener);

View file

@ -33,7 +33,7 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
/**

View file

@ -56,9 +56,9 @@ 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.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.PeerToPeerCommHelper;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CreateSessionData;
import com.raytheon.uf.viz.collaboration.comm.provider.session.PeerToPeerCommHelper;
import com.raytheon.uf.viz.collaboration.comm.provider.session.SharedDisplaySession;
import com.raytheon.uf.viz.collaboration.comm.provider.session.VenueSession;
import com.raytheon.uf.viz.collaboration.display.data.SharedDisplaySessionMgr;

View file

@ -0,0 +1,101 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
*
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
*
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
*
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.uf.viz.collaboration.ui;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PartInitException;
import com.google.common.eventbus.Subscribe;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.ServerDisconnectEvent;
import com.raytheon.uf.viz.collaboration.ui.actions.LogoutAction;
import com.raytheon.uf.viz.collaboration.ui.login.LoginDialog;
import com.raytheon.uf.viz.core.VizApp;
/**
* Handles xmpp server disconnect events
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Apr 11, 2014 2903 bclement Initial creation
*
* </pre>
*
* @author bclement
* @version 1.0
*/
public class DisconnectHandler {
private static final String TITLE = "Disconnected from Collaboration Server";
private static final String DEFAULT_MESSAGE = "Click OK to re-login to the collaboration server";
/**
*
*/
public DisconnectHandler() {
}
/**
* Handle a disconnect from the xmpp server
*
* @param e
*/
@Subscribe
public void serverDisconnected(final ServerDisconnectEvent e) {
CollaborationConnection conn = CollaborationConnection.getConnection();
if (conn == null) {
// we aren't logged in
return;
}
VizApp.runAsync(new Runnable() {
@Override
public void run() {
/* close out existing collaboration components */
LogoutAction.closeCollaboration();
Shell shell = new Shell(Display.getCurrent());
StringBuilder msg = new StringBuilder();
String reason = e.getReason();
if (reason != null && !reason.isEmpty()) {
msg.append("Reason: ").append(reason).append('\n');
}
msg.append(DEFAULT_MESSAGE);
/* inform the user of disconnect then re-login if requested */
if (MessageDialog.openConfirm(shell, TITLE, msg.toString())
&& new LoginDialog(shell).login()) {
try {
/* user has logged back in, put the view back */
CollaborationGroupView.showView(true);
} catch (PartInitException e) {
Activator.statusHandler.error(
"Problem restoring collaboration view", e);
}
}
}
});
}
}

View file

@ -42,7 +42,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.invite.SharedDisplayVenue
import com.raytheon.uf.viz.collaboration.comm.identity.invite.VenueInvite;
import com.raytheon.uf.viz.collaboration.comm.identity.user.IUser;
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.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.session.SharedDisplaySession;
import com.raytheon.uf.viz.collaboration.comm.provider.session.VenueSession;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueId;

View file

@ -37,7 +37,7 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.jivesoftware.smack.RosterGroup;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
/**

View file

@ -54,7 +54,7 @@ import org.jivesoftware.smack.XMPPException;
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.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserSearch;
import com.raytheon.uf.viz.collaboration.ui.actions.AddToGroupAction;

View file

@ -31,7 +31,7 @@ import org.eclipse.jface.viewers.ViewerFilter;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
import com.raytheon.uf.viz.collaboration.comm.provider.user.SharedGroup;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;

View file

@ -38,7 +38,7 @@ import org.jivesoftware.smack.packet.Presence;
import com.raytheon.uf.viz.collaboration.comm.identity.IVenueSession;
import com.raytheon.uf.viz.collaboration.comm.identity.info.IVenue;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
import com.raytheon.uf.viz.collaboration.comm.provider.user.SharedGroup;

View file

@ -30,8 +30,8 @@ import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.RosterChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;

View file

@ -27,7 +27,7 @@ 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.IVenueSession;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
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.session.SessionMsgArchive;

View file

@ -26,7 +26,7 @@ import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FontDialog;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.core.icon.IconUtil;

View file

@ -26,7 +26,7 @@ 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.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.ChangePasswordDialog;
/**

View file

@ -33,7 +33,7 @@ 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.info.SiteConfigInformation;
import com.raytheon.uf.viz.collaboration.comm.identity.info.SiteConfigInformation.SiteConfig;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.SiteConfigurationManager;
/**

View file

@ -33,7 +33,7 @@ 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.info.SiteConfigInformation;
import com.raytheon.uf.viz.collaboration.comm.identity.info.SiteConfigInformation.SiteConfig;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.SiteConfigurationManager;
import com.raytheon.uf.viz.collaboration.ui.session.SubscribeList;

View file

@ -33,7 +33,7 @@ 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.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.CollaborationUtils;
import com.raytheon.uf.viz.core.icon.IconUtil;

View file

@ -28,7 +28,7 @@ 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.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.login.ChangeStatusDialog;
import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants;

View file

@ -28,11 +28,8 @@ import org.eclipse.ui.PartInitException;
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.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.CollaborationGroupView;
import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants;
import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
/**
* Action to open the group view, as well as the default chat room
@ -45,6 +42,7 @@ import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
* ------------ ---------- ----------- --------------------------
* Mar 1, 2012 rferrel Initial creation
* Mar 05, 2014 2798 mpduff Don't create a new DisplayFeedAction
* Apr 11, 2014 2903 bclement moved collaboration view init to CollaborationGroupView
*
* </pre>
*
@ -62,27 +60,12 @@ public class CollaborationGroupAction extends AbstractHandler {
// If connection is null then user has not logged in
boolean initialExecutionFlag = CollaborationConnection
.getConnection() == null;
new LoginAction().run();
CollaborationConnection connection = CollaborationConnection
.getConnection();
if (connection == null) {
if (!new LoginAction().login()) {
// user cancelled login
return event;
}
CollaborationGroupView view = (CollaborationGroupView) CaveWorkbenchPageManager
.getActiveInstance().showView(CollaborationGroupView.ID);
// Is this is the first log in
if (initialExecutionFlag) {
// if autojoin is selected (to join the default room)
if (Activator.getDefault().getPreferenceStore()
.getBoolean(CollabPrefConstants.AUTO_JOIN)) {
DisplayFeedAction action = view.getDisplayFeedAction();
action.setChecked(true);
action.run();
}
}
CollaborationGroupView.showView(initialExecutionFlag);
} catch (PartInitException e) {
statusHandler.handle(Priority.PROBLEM,
"Unable to open collaboration contact list", e);

View file

@ -22,7 +22,7 @@ package com.raytheon.uf.viz.collaboration.ui.actions;
import org.eclipse.jface.action.Action;
import org.eclipse.swt.widgets.Display;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
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.CreateGroupDialog;

View file

@ -29,7 +29,7 @@ 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.IVenueSession;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CreateSessionData;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.ui.Activator;

View file

@ -21,7 +21,7 @@ package com.raytheon.uf.viz.collaboration.ui.actions;
import org.eclipse.jface.action.Action;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.core.icon.IconUtil;

View file

@ -40,7 +40,7 @@ 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.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.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.session.VenueSession;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.prefs.HandleUtil;

View file

@ -42,7 +42,7 @@ 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.invite.SharedDisplayVenueInvite;
import com.raytheon.uf.viz.collaboration.comm.identity.invite.VenueInvite;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;
import com.raytheon.uf.viz.collaboration.display.data.SharedDisplaySessionMgr;

View file

@ -32,7 +32,7 @@ import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import com.raytheon.uf.viz.collaboration.comm.identity.ISharedDisplaySession;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.display.IRemoteDisplayContainer;
import com.raytheon.uf.viz.collaboration.display.editor.ICollaborationEditor;
import com.raytheon.uf.viz.collaboration.display.roles.dataprovider.SharedEditorsManager;

View file

@ -23,7 +23,7 @@ import org.eclipse.jface.action.Action;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.login.LoginDialog;
import com.raytheon.uf.viz.core.icon.IconUtil;
@ -38,6 +38,7 @@ import com.raytheon.uf.viz.core.icon.IconUtil;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 11, 2012 bsteffen Initial creation
* Apr 11, 2014 2903 bclement added success flag
*
* </pre>
*
@ -46,6 +47,8 @@ import com.raytheon.uf.viz.core.icon.IconUtil;
*/
public class LoginAction extends Action {
private boolean success = false;
public LoginAction() {
super("Login...", IconUtil.getImageDescriptor(Activator.getDefault()
@ -62,9 +65,24 @@ public class LoginAction extends Action {
if (shell == null) {
return;
}
LoginDialog dlg = new LoginDialog(shell);
dlg.open();
success = new LoginDialog(shell).login();
}
}
/**
* @return the success
*/
public boolean isSuccess() {
return success;
}
/**
* Convenience method to run action and return results
*
* @return true if login was successful
*/
public boolean login() {
this.run();
return isSuccess();
}
}

View file

@ -34,7 +34,7 @@ import org.eclipse.ui.PlatformUI;
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.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.CollaborationGroupView;
import com.raytheon.uf.viz.collaboration.ui.ConnectionSubscriber;
@ -54,6 +54,7 @@ import com.raytheon.viz.ui.views.CaveWorkbenchPageManager;
* ------------ ---------- ----------- --------------------------
* Jul 11, 2012 bsteffen Initial creation
* Dec 19, 2013 2563 bclement moved close logic to public method
* Apr 11, 2014 2903 bclement made close method static, added safety check
*
* </pre>
*
@ -90,7 +91,7 @@ public class LogoutAction extends Action {
* Close collaboration UI and close connection
*
*/
public void closeCollaboration() {
public static void closeCollaboration() {
for (IViewReference ref : CaveWorkbenchPageManager.getActiveInstance()
.getViewReferences()) {
IViewPart view = ref.getView(false);
@ -118,8 +119,10 @@ public class LogoutAction extends Action {
}
CollaborationConnection connection = CollaborationConnection
.getConnection();
ConnectionSubscriber.unsubscribe(connection);
connection.close();
if (connection != null) {
ConnectionSubscriber.unsubscribe(connection);
connection.close();
}
}
}

View file

@ -28,7 +28,7 @@ import org.jivesoftware.smack.packet.Presence.Type;
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.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
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.session.PeerToPeerView;

View file

@ -21,7 +21,7 @@ package com.raytheon.uf.viz.collaboration.ui.actions;
import org.eclipse.jface.action.Action;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.ui.Activator;

View file

@ -23,8 +23,8 @@ import org.eclipse.jface.action.Action;
import org.jivesoftware.smack.RosterEntry;
import com.raytheon.uf.viz.collaboration.comm.identity.event.RosterChangeType;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.RosterChangeEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.core.icon.IconUtil;

View file

@ -26,7 +26,7 @@ import org.jivesoftware.smack.packet.Presence.Type;
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
import com.raytheon.uf.viz.collaboration.comm.identity.IAccountManager;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.core.icon.IconUtil;

View file

@ -22,7 +22,7 @@ package com.raytheon.uf.viz.collaboration.ui.actions;
import org.eclipse.jface.action.Action;
import org.eclipse.swt.widgets.Display;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.UserSearchDialog;
import com.raytheon.uf.viz.core.icon.IconUtil;

View file

@ -23,7 +23,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
/**

View file

@ -26,7 +26,7 @@ import java.util.List;
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.connection.CollaborationConnection;
/**
* Retrieve session objects from contacts list

View file

@ -36,7 +36,7 @@ import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants;

View file

@ -52,8 +52,8 @@ import com.raytheon.uf.viz.collaboration.comm.identity.info.SiteConfigInformatio
import com.raytheon.uf.viz.collaboration.comm.identity.info.SiteConfigInformation.HostConfig;
import com.raytheon.uf.viz.collaboration.comm.identity.info.SiteConfigInformation.SiteConfig;
import com.raytheon.uf.viz.collaboration.comm.provider.Tools;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnectionData;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnectionData;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.CollaborationUtils;
import com.raytheon.uf.viz.collaboration.ui.ConnectionSubscriber;
@ -75,6 +75,8 @@ import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants;
* Jan 08, 2014 2563 bclement added Add/Remove buttons for server list
* Jan 15, 2014 2630 bclement connection data stores status as Mode object
* Apr 07, 2014 2785 mpduff Implemented change to CollaborationConnection
* Apr 11, 2014 2903 bclement added success flag, moved login logic to static method
* fixed populating server with previous, removed password from heap
*
* </pre>
*
@ -110,6 +112,8 @@ public class LoginDialog extends Dialog {
private Shell shell;
private boolean success = false;
/**
* @param parentShell
*/
@ -179,10 +183,11 @@ public class LoginDialog extends Dialog {
Iterator<HostConfig> iter = Iterators.concat(siteServers.iterator(),
userServers.iterator());
int index = 0;
String prevServer = loginData.getServer();
for (int i = 0; iter.hasNext() && i < names.length; i++) {
HostConfig config = iter.next();
names[i] = config.toString();
if (loginData.getServer().equals(names[i])) {
if (config.getHostname().equals(prevServer)) {
index = i;
}
}
@ -320,7 +325,7 @@ public class LoginDialog extends Dialog {
@Override
public void widgetSelected(SelectionEvent event) {
loginData.setUserName(userText.getText().trim());
loginData.setPassword(passwordText.getText().trim());
String password = passwordText.getText().trim();
loginData.setServer(HostConfig.removeDescription(serverText
.getText()));
loginData.setStatus(CollaborationUtils.parseMode(statusCombo
@ -347,7 +352,7 @@ public class LoginDialog extends Dialog {
}
loginData.setServer(server);
if (loginData.getPassword().isEmpty()) {
if (password.isEmpty()) {
errorMessages.add("Must enter a password.");
}
@ -365,38 +370,10 @@ public class LoginDialog extends Dialog {
messageBox.setMessage(sb.toString());
messageBox.open();
} else {
try {
// Create the connection
CollaborationConnection collabConnection = CollaborationConnection
.createConnection(loginData);
// Subscribe to the collaboration connection
ConnectionSubscriber.subscribe(collabConnection);
// Connect to the XMPP server
collabConnection.connect();
success = login(loginData, password);
if (success) {
storeLoginData();
shell.dispose();
// send initial presence
Mode mode = loginData.getStatus();
if (mode == null) {
mode = Mode.available;
}
Presence initialPresence = new Presence(Type.available,
loginData.getMessage(), 0, mode);
Tools.setProperties(initialPresence,
loginData.getAttributes());
collabConnection.getAccountManager().sendPresence(
initialPresence);
} catch (CollaborationException e) {
Activator.statusHandler.handle(Priority.PROBLEM,
"Error connecting to collaboration server: "
+ e.getLocalizedMessage(), e);
}
}
}
@ -414,6 +391,61 @@ public class LoginDialog extends Dialog {
});
}
/**
* Attempt to login to xmpp server.
*
* @param loginData
* @param password
* @return true if login was successful
*/
public static boolean login(CollaborationConnectionData loginData,
String password) {
CollaborationConnection collabConnection = null;
boolean rval = false;
boolean subscribed = false;
try {
// Create the connection
collabConnection = CollaborationConnection
.createConnection(loginData);
// Subscribe to the collaboration connection
ConnectionSubscriber.subscribe(collabConnection);
subscribed = true;
// Login to the XMPP server
collabConnection.login(password);
/* login was success, other errors are recoverable */
rval = true;
// send initial presence
Mode mode = loginData.getStatus();
if (mode == null) {
mode = Mode.available;
}
Presence initialPresence = new Presence(Type.available,
loginData.getMessage(), 0, mode);
Tools.setProperties(initialPresence, loginData.getAttributes());
collabConnection.getAccountManager().sendPresence(initialPresence);
} catch (CollaborationException e) {
if (subscribed && collabConnection != null) {
ConnectionSubscriber.unsubscribe(collabConnection);
}
String msg;
if (rval) {
msg = "Error sending initial presence to collaboration server";
} else {
msg = "Error connecting to collaboration server: "
+ e.getLocalizedMessage();
}
Activator.statusHandler.handle(Priority.PROBLEM, msg, e);
}
return rval;
}
private void storeLoginData() {
preferences.setValue(CollabPrefConstants.P_USERNAME,
loginData.getUserName());
@ -435,4 +467,21 @@ public class LoginDialog extends Dialog {
loginData.setMessage(preferences
.getString(CollabPrefConstants.P_MESSAGE));
}
/**
* @return the success
*/
public boolean isSuccess() {
return success;
}
/**
* Convenience method to open dialog and return true if login was successful
*
* @return
*/
public boolean login() {
open();
return isSuccess();
}
}

View file

@ -46,7 +46,7 @@ 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.common.util.FileUtil;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
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.core.sounds.SoundUtil;

View file

@ -50,7 +50,7 @@ import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.PathManager;
import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.CollaborationUtils;
import com.raytheon.uf.viz.collaboration.ui.data.AlertWord;

View file

@ -28,7 +28,7 @@ import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.prefs.CollabPrefConstants.HandleOption;

View file

@ -43,7 +43,7 @@ import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import com.google.common.collect.Lists;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.ContactsManager;
import com.raytheon.uf.viz.collaboration.comm.provider.user.IDConverter;
import com.raytheon.uf.viz.collaboration.comm.provider.user.SharedGroup;

View file

@ -29,7 +29,7 @@ import org.jivesoftware.smack.packet.Presence;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.viz.collaboration.comm.identity.info.SiteConfigInformation;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserSearch;
import com.raytheon.uf.viz.collaboration.ui.Activator;

View file

@ -34,8 +34,8 @@ import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.viz.collaboration.comm.identity.roster.ISubscriptionResponder;
import com.raytheon.uf.viz.collaboration.comm.identity.roster.SubscriptionResponse;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.session.ISubscriptionRequestCompleteAction;
import com.raytheon.uf.viz.collaboration.comm.provider.account.ISubscriptionRequestCompleteAction;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserSearch;
import com.raytheon.uf.viz.collaboration.ui.Activator;

View file

@ -57,7 +57,7 @@ import com.google.common.eventbus.Subscribe;
import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.viz.collaboration.comm.identity.IMessage;
import com.raytheon.uf.viz.collaboration.comm.identity.user.IUser;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
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.CollaborationUtils;

View file

@ -34,7 +34,7 @@ import com.raytheon.uf.viz.collaboration.comm.identity.ISession;
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.info.SiteConfigInformation;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.session.SharedDisplaySession;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;

View file

@ -42,7 +42,7 @@ 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.IMessage;
import com.raytheon.uf.viz.collaboration.comm.identity.IPeerToPeer;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.RosterItem;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.ui.actions.PrintLogActionContributionItem;

View file

@ -41,7 +41,7 @@ import org.osgi.framework.Bundle;
import com.google.common.eventbus.Subscribe;
import com.raytheon.uf.viz.collaboration.comm.identity.IMessage;
import com.raytheon.uf.viz.collaboration.comm.identity.info.SiteConfigInformation;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;
import com.raytheon.uf.viz.collaboration.ui.Activator;
import com.raytheon.uf.viz.collaboration.ui.SiteColorInformation;

View file

@ -54,7 +54,7 @@ import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.localization.exception.LocalizationException;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
/**

View file

@ -73,9 +73,9 @@ import com.raytheon.uf.viz.collaboration.comm.identity.IVenueSession;
import com.raytheon.uf.viz.collaboration.comm.identity.event.IVenueParticipantEvent;
import com.raytheon.uf.viz.collaboration.comm.identity.event.ParticipantEventType;
import com.raytheon.uf.viz.collaboration.comm.identity.info.IVenue;
import com.raytheon.uf.viz.collaboration.comm.provider.connection.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.event.UserNicknameChangedEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.event.VenueUserEvent;
import com.raytheon.uf.viz.collaboration.comm.provider.session.CollaborationConnection;
import com.raytheon.uf.viz.collaboration.comm.provider.session.VenueSession;
import com.raytheon.uf.viz.collaboration.comm.provider.user.UserId;
import com.raytheon.uf.viz.collaboration.comm.provider.user.VenueParticipant;