Merge branch 'new_devel' into 11-Collaboration
Former-commit-id:b8df9f46e4
[formerly a441dcd259dbf3ecd77464d1bd0cbe1f4cdb1cb6] Former-commit-id:395ae5ae63
This commit is contained in:
commit
5b943096c5
9 changed files with 806 additions and 184 deletions
|
@ -43,10 +43,13 @@ import com.raytheon.uf.common.status.UFStatus;
|
|||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.IPresence.Type;
|
||||
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.event.ITextMessageEvent;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.event.IVenueInvitationEvent;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.user.IQualifiedID;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.TextMessage;
|
||||
import com.raytheon.uf.viz.collaboration.comm.provider.session.SessionManager;
|
||||
import com.raytheon.uf.viz.collaboration.ui.editor.CollaborationEditor;
|
||||
import com.raytheon.uf.viz.collaboration.ui.login.LoginData;
|
||||
|
@ -56,6 +59,7 @@ import com.raytheon.uf.viz.collaboration.ui.role.DataProviderEventController;
|
|||
import com.raytheon.uf.viz.collaboration.ui.role.ParticipantEventController;
|
||||
import com.raytheon.uf.viz.collaboration.ui.role.SessionLeaderEventController;
|
||||
import com.raytheon.uf.viz.collaboration.ui.session.CollaborationSessionView;
|
||||
import com.raytheon.uf.viz.collaboration.ui.session.PeerToPeerView;
|
||||
import com.raytheon.uf.viz.core.VizApp;
|
||||
|
||||
/**
|
||||
|
@ -220,6 +224,15 @@ public class CollaborationDataManager {
|
|||
if (isConnected()) {
|
||||
// Register handlers and events for the new manager.
|
||||
manager.registerEventHandler(this);
|
||||
try {
|
||||
ISession p2pSession = manager.getPeerToPeerSession();
|
||||
p2pSession.registerEventHandler(this);
|
||||
} catch (CollaborationException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
wbListener = new IWorkbenchListener() {
|
||||
|
||||
@Override
|
||||
|
@ -231,6 +244,16 @@ public class CollaborationDataManager {
|
|||
@Override
|
||||
public void postShutdown(IWorkbench workbench) {
|
||||
if (manager != null) {
|
||||
try {
|
||||
ISession p2pSession = manager
|
||||
.getPeerToPeerSession();
|
||||
p2pSession.unRegisterEventHandler(this);
|
||||
} catch (CollaborationException e) {
|
||||
// TODO Auto-generated catch block. Please
|
||||
// revise as appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
manager.unRegisterEventHandler(this);
|
||||
manager.closeManager();
|
||||
manager = null;
|
||||
|
@ -463,6 +486,49 @@ public class CollaborationDataManager {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* This takes a peer to peer message and displays it in the proper view.
|
||||
*
|
||||
* @param messageEvent
|
||||
*/
|
||||
@Subscribe
|
||||
public void peer2peerMessage(ITextMessageEvent messageEvent) {
|
||||
final TextMessage message = messageEvent.getMessage();
|
||||
// System.out.println("p2pMsg from: " + message.getFrom().getFQName());
|
||||
// System.out.println("p2pMsgt body: " + message.getBody());
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
String id = message.getFrom().getFQName();
|
||||
for (IViewReference ref : PlatformUI.getWorkbench()
|
||||
.getActiveWorkbenchWindow().getActivePage()
|
||||
.getViewReferences()) {
|
||||
if (id.equals(ref.getSecondaryId())) {
|
||||
PeerToPeerView p2pView = (PeerToPeerView) ref
|
||||
.getView(false);
|
||||
p2pView.appendMessage(message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
try {
|
||||
PeerToPeerView p2pView = (PeerToPeerView) PlatformUI
|
||||
.getWorkbench()
|
||||
.getActiveWorkbenchWindow()
|
||||
.getActivePage()
|
||||
.showView(PeerToPeerView.ID, id,
|
||||
IWorkbenchPage.VIEW_ACTIVATE);
|
||||
p2pView.appendMessage(message);
|
||||
} catch (PartInitException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public String joinCollaborationSession(String venueName, String sessionId) {
|
||||
String result = sessionId;
|
||||
if (sessionsMap.get(sessionId) == null) {
|
||||
|
|
|
@ -0,0 +1,227 @@
|
|||
package com.raytheon.uf.viz.collaboration.ui;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
**/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
|
||||
import com.raytheon.uf.viz.collaboration.data.CollaborationDataManager;
|
||||
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 3, 2012 rferrel Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author rferrel
|
||||
* @version 1.0
|
||||
*/
|
||||
public class ChangePasswordDialog extends CaveSWTDialog {
|
||||
|
||||
private Label userLabel;
|
||||
|
||||
private Text passwordTF;
|
||||
|
||||
private Text verifyPasswordTF;
|
||||
|
||||
public ChangePasswordDialog(Shell parentShell) {
|
||||
super(parentShell);
|
||||
setText("Change Password");
|
||||
}
|
||||
|
||||
private Control createDialogArea(Composite parent) {
|
||||
CollaborationDataManager manager = CollaborationDataManager
|
||||
.getInstance();
|
||||
String user = manager.getLoginId();
|
||||
Composite body = new Composite(parent, SWT.NONE);
|
||||
body.setLayout(new GridLayout(2, false));
|
||||
// body.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
|
||||
// | GridData.HORIZONTAL_ALIGN_FILL));
|
||||
Label label = null;
|
||||
GridData gd = null;
|
||||
userLabel = new Label(body, SWT.NONE);
|
||||
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
gd.horizontalSpan = 2;
|
||||
userLabel.setLayoutData(gd);
|
||||
userLabel.setText(user);
|
||||
|
||||
label = new Label(body, SWT.NONE);
|
||||
label.setText("New Password: ");
|
||||
passwordTF = new Text(body, SWT.BORDER | SWT.PASSWORD);
|
||||
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
passwordTF.setLayoutData(gd);
|
||||
|
||||
label = new Label(body, SWT.NONE);
|
||||
label.setText("Verify Password: ");
|
||||
verifyPasswordTF = new Text(body, SWT.BORDER | SWT.PASSWORD);
|
||||
verifyPasswordTF.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
|
||||
true));
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializeComponents(Shell shell) {
|
||||
shell.setLayout(new GridLayout(1, false));
|
||||
createDialogArea(shell);
|
||||
createButtonBar(shell);
|
||||
}
|
||||
|
||||
private void createButtonBar(Composite parent) {
|
||||
GridData gd = null;
|
||||
Composite bar = new Composite(parent, SWT.NONE);
|
||||
|
||||
// set up to center buttons.
|
||||
bar.setLayout(new GridLayout(0, true));
|
||||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
bar.setLayoutData(gd);
|
||||
createButton(bar, IDialogConstants.OK_ID, "Change", true);
|
||||
|
||||
createButton(bar, IDialogConstants.CANCEL_ID,
|
||||
IDialogConstants.CANCEL_LABEL, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void preOpened() {
|
||||
super.preOpened();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new button with the given id.
|
||||
* <p>
|
||||
* The <code>Dialog</code> implementation of this framework method creates a
|
||||
* standard push button, registers it for selection events including button
|
||||
* presses, and registers default buttons with its shell. The button id is
|
||||
* stored as the button's client data. If the button id is
|
||||
* <code>IDialogConstants.CANCEL_ID</code>, the new button will be
|
||||
* accessible from <code>getCancelButton()</code>. If the button id is
|
||||
* <code>IDialogConstants.OK_ID</code>, the new button will be accesible
|
||||
* from <code>getOKButton()</code>. Note that the parent's layout is assumed
|
||||
* to be a <code>GridLayout</code> and the number of columns in this layout
|
||||
* is incremented. Subclasses may override.
|
||||
* </p>
|
||||
*
|
||||
* @param parent
|
||||
* the parent composite
|
||||
* @param id
|
||||
* the id of the button (see <code>IDialogConstants.*_ID</code>
|
||||
* constants for standard dialog button ids)
|
||||
* @param label
|
||||
* the label from the button
|
||||
* @param defaultButton
|
||||
* <code>true</code> if the button is to be the default button,
|
||||
* and <code>false</code> otherwise
|
||||
*
|
||||
* @return the new button
|
||||
*
|
||||
* @see #getCancelButton
|
||||
* @see #getOKButton()
|
||||
*/
|
||||
protected Button createButton(Composite parent, int id, String label,
|
||||
boolean defaultButton) {
|
||||
// increment the number of columns in the button bar
|
||||
((GridLayout) parent.getLayout()).numColumns++;
|
||||
Button button = new Button(parent, SWT.PUSH);
|
||||
button.setText(label);
|
||||
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
gd.minimumWidth = 70;
|
||||
button.setLayoutData(gd);
|
||||
button.setData(new Integer(id));
|
||||
button.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
Integer val = (Integer) event.widget.getData();
|
||||
if (val != IDialogConstants.OK_ID) {
|
||||
setReturnValue(null);
|
||||
ChangePasswordDialog.this.getShell().dispose();
|
||||
} else {
|
||||
Text focusField = null;
|
||||
List<String> errorMessages = new ArrayList<String>();
|
||||
String password = passwordTF.getText();
|
||||
String verifyPassword = verifyPasswordTF.getText();
|
||||
if (password.length() == 0) {
|
||||
errorMessages.add("Must enter new password.");
|
||||
focusField = passwordTF;
|
||||
verifyPasswordTF.setText("");
|
||||
} else if (verifyPassword.length() == 0) {
|
||||
errorMessages.add("Enter password again to verify.");
|
||||
focusField = verifyPasswordTF;
|
||||
} else if (password.equals(verifyPassword) == false) {
|
||||
errorMessages
|
||||
.add("New and verified password do not match.");
|
||||
errorMessages.add("Enter them again.");
|
||||
focusField = passwordTF;
|
||||
verifyPasswordTF.setText("");
|
||||
}
|
||||
|
||||
if (focusField == null) {
|
||||
setReturnValue(password);
|
||||
ChangePasswordDialog.this.getShell().dispose();
|
||||
} else {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String prefix = "";
|
||||
for (String msg : errorMessages) {
|
||||
sb.append(prefix).append(msg);
|
||||
prefix = "\n";
|
||||
}
|
||||
MessageBox messageBox = new MessageBox(event.widget
|
||||
.getDisplay().getActiveShell(), SWT.ERROR);
|
||||
messageBox.setText("Change Password Error");
|
||||
messageBox.setMessage(sb.toString());
|
||||
messageBox.open();
|
||||
event.doit = false;
|
||||
setReturnValue(null);
|
||||
focusField.setFocus();
|
||||
focusField.selectAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
if (defaultButton) {
|
||||
Shell shell = parent.getShell();
|
||||
if (shell != null) {
|
||||
shell.setDefaultButton(button);
|
||||
}
|
||||
}
|
||||
return button;
|
||||
}
|
||||
}
|
|
@ -28,8 +28,6 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
|
||||
import org.eclipse.jface.action.Action;
|
||||
import org.eclipse.jface.action.ActionContributionItem;
|
||||
import org.eclipse.jface.action.IMenuCreator;
|
||||
import org.eclipse.jface.action.IMenuListener;
|
||||
import org.eclipse.jface.action.IMenuManager;
|
||||
import org.eclipse.jface.action.IToolBarManager;
|
||||
|
@ -73,6 +71,7 @@ import org.osgi.framework.Bundle;
|
|||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.IPresence;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.IPresence.Type;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.ISession;
|
||||
|
@ -90,6 +89,8 @@ import com.raytheon.uf.viz.collaboration.data.CollaborationUser;
|
|||
import com.raytheon.uf.viz.collaboration.data.LoginUser;
|
||||
import com.raytheon.uf.viz.collaboration.data.SessionGroup;
|
||||
import com.raytheon.uf.viz.collaboration.ui.editor.CollaborationEditor;
|
||||
import com.raytheon.uf.viz.collaboration.ui.login.ChangeStatusDialog;
|
||||
import com.raytheon.uf.viz.collaboration.ui.login.LoginData;
|
||||
import com.raytheon.uf.viz.collaboration.ui.session.AbstractSessionView;
|
||||
import com.raytheon.uf.viz.collaboration.ui.session.CollaborationSessionView;
|
||||
import com.raytheon.uf.viz.collaboration.ui.session.PeerToPeerView;
|
||||
|
@ -157,13 +158,11 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
|
||||
private Action removeUserAction;
|
||||
|
||||
private Action changeMessageAction;
|
||||
private Action changeStatusAction;
|
||||
|
||||
private Action changePasswordAction;
|
||||
|
||||
private Action changeStatusAction;
|
||||
|
||||
private Action refreshActiveSessionsAction;
|
||||
// private Action refreshActiveSessionsAction;
|
||||
|
||||
private Action collapseAllAction;
|
||||
|
||||
|
@ -227,13 +226,15 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
String sessionId = getId();
|
||||
IVenueSession session = CollaborationDataManager.getInstance()
|
||||
.getSession(sessionId);
|
||||
String roomName = session.getVenue().getInfo()
|
||||
.getVenueDescription();
|
||||
List<String> ids = new ArrayList<String>();
|
||||
|
||||
for (CollaborationUser user : getSelectedUsers()) {
|
||||
// TODO not add to list if user is already in the session.
|
||||
String id = user.getId();
|
||||
if (!ids.contains(id)) {
|
||||
System.out.println("Add Selected User: " + id);
|
||||
ids.add(id);
|
||||
}
|
||||
System.out.println("Add Selected User: " + id);
|
||||
ids.add(id);
|
||||
}
|
||||
IVenueInfo info = session.getVenue().getInfo();
|
||||
System.out.println("room: " + info.getVenueName());
|
||||
|
@ -315,24 +316,24 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
}
|
||||
};
|
||||
|
||||
changeMessageAction = new Action("Change Message...") {
|
||||
changeStatusAction = new Action("Change Status...") {
|
||||
public void run() {
|
||||
System.out.println("Change message");
|
||||
changeStatus();
|
||||
};
|
||||
};
|
||||
|
||||
changePasswordAction = new Action("Change password...") {
|
||||
public void run() {
|
||||
System.out.println("Change password here");
|
||||
changePassword();
|
||||
};
|
||||
};
|
||||
|
||||
changeStatusAction = new Action("Change Status",
|
||||
Action.AS_DROP_DOWN_MENU) {
|
||||
public void run() {
|
||||
System.out.println("Change Status here to: " + getId());
|
||||
};
|
||||
};
|
||||
// changeStatusAction = new Action("Change Status",
|
||||
// Action.AS_DROP_DOWN_MENU) {
|
||||
// public void run() {
|
||||
// System.out.println("Change Status here to: " + getId());
|
||||
// };
|
||||
// };
|
||||
|
||||
// refreshActiveSessionsAction = new Action("Refresh") {
|
||||
// public void run() {
|
||||
|
@ -353,30 +354,30 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
collapseAllAction.setImageDescriptor(IconUtil.getImageDescriptor(
|
||||
bundle, "collapseall.gif"));
|
||||
|
||||
IMenuCreator creator = new IMenuCreator() {
|
||||
|
||||
Menu menu;
|
||||
|
||||
@Override
|
||||
public Menu getMenu(Menu parent) {
|
||||
menu = new Menu(parent);
|
||||
fillStatusMenu(menu);
|
||||
return menu;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Menu getMenu(Control parent) {
|
||||
menu = new Menu(parent);
|
||||
fillStatusMenu(menu);
|
||||
return menu;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
menu.dispose();
|
||||
}
|
||||
};
|
||||
changeStatusAction.setMenuCreator(creator);
|
||||
// IMenuCreator creator = new IMenuCreator() {
|
||||
//
|
||||
// Menu menu;
|
||||
//
|
||||
// @Override
|
||||
// public Menu getMenu(Menu parent) {
|
||||
// menu = new Menu(parent);
|
||||
// fillStatusMenu(menu);
|
||||
// return menu;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Menu getMenu(Control parent) {
|
||||
// menu = new Menu(parent);
|
||||
// fillStatusMenu(menu);
|
||||
// return menu;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void dispose() {
|
||||
// menu.dispose();
|
||||
// }
|
||||
// };
|
||||
// changeStatusAction.setMenuCreator(creator);
|
||||
|
||||
removeGroupAction = new Action("Remove Group") {
|
||||
public void run() {
|
||||
|
@ -388,6 +389,45 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
};
|
||||
}
|
||||
|
||||
private void changePassword() {
|
||||
System.out.println("Change password here");
|
||||
ChangePasswordDialog dialog = new ChangePasswordDialog(Display
|
||||
.getCurrent().getActiveShell());
|
||||
dialog.open();
|
||||
|
||||
Object result = dialog.getReturnValue();
|
||||
if (result != null) {
|
||||
char[] password = result.toString().toCharArray();
|
||||
SessionManager sessionManager = CollaborationDataManager
|
||||
.getInstance().getSessionManager();
|
||||
try {
|
||||
sessionManager.getAccountManager().changePassword(password);
|
||||
} catch (CollaborationException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void changeStatus() {
|
||||
ChangeStatusDialog dialog = new ChangeStatusDialog(Display.getCurrent()
|
||||
.getActiveShell());
|
||||
dialog.open();
|
||||
|
||||
LoginData loginData = (LoginData) dialog.getReturnValue();
|
||||
if (loginData != null) {
|
||||
LoginUser loginUser = getLoginUser();
|
||||
loginUser.setMode(loginData.getMode());
|
||||
loginUser.setStatusMessage(loginData.getModeMessage());
|
||||
usersTreeViewer.refresh(loginUser, true);
|
||||
System.err.println("send mode change here: "
|
||||
+ loginData.getMode().toString() + ", Message: \""
|
||||
+ loginData.getModeMessage() + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This displays a warning dialog then closes all collaboration views and
|
||||
* disconnects from the server.
|
||||
|
@ -456,22 +496,22 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
|
||||
}
|
||||
|
||||
private void fillStatusMenu(Menu menu) {
|
||||
for (IPresence.Mode type : CollaborationUtils.statusModes) {
|
||||
Action action = new Action(type.getMode()) {
|
||||
public void run() {
|
||||
changeStatusAction.setId(getId());
|
||||
changeStatusAction.run();
|
||||
};
|
||||
};
|
||||
action.setId(type.name());
|
||||
ActionContributionItem item = new ActionContributionItem(action);
|
||||
action.setImageDescriptor(IconUtil.getImageDescriptor(Activator
|
||||
.getDefault().getBundle(), type.name().toLowerCase()
|
||||
+ ".gif"));
|
||||
item.fill(menu, -1);
|
||||
}
|
||||
}
|
||||
// private void fillStatusMenu(Menu menu) {
|
||||
// for (IPresence.Mode type : CollaborationUtils.statusModes) {
|
||||
// Action action = new Action(type.getMode()) {
|
||||
// public void run() {
|
||||
// changeStatusAction.setId(getId());
|
||||
// changeStatusAction.run();
|
||||
// };
|
||||
// };
|
||||
// action.setId(type.name());
|
||||
// ActionContributionItem item = new ActionContributionItem(action);
|
||||
// action.setImageDescriptor(IconUtil.getImageDescriptor(Activator
|
||||
// .getDefault().getBundle(), type.name().toLowerCase()
|
||||
// + ".gif"));
|
||||
// item.fill(menu, -1);
|
||||
// }
|
||||
// }
|
||||
|
||||
private void createToolbar() {
|
||||
IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
|
||||
|
@ -500,8 +540,8 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
mgr.add(addUserAction);
|
||||
mgr.add(selectGroups);
|
||||
mgr.add(new Separator());
|
||||
// mgr.add(changeStatusAction);
|
||||
mgr.add(changeStatusAction);
|
||||
mgr.add(changeMessageAction);
|
||||
mgr.add(changePasswordAction);
|
||||
mgr.add(new Separator());
|
||||
if (CollaborationDataManager.getInstance().isConnected()) {
|
||||
|
@ -1043,6 +1083,17 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
}
|
||||
}
|
||||
|
||||
private LoginUser getLoginUser() {
|
||||
LoginUser loginUser = null;
|
||||
for (CollaborationNode node : topLevel.getChildren()) {
|
||||
if (node instanceof LoginUser) {
|
||||
loginUser = (LoginUser) node;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return loginUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
|
@ -1051,7 +1102,7 @@ public class CollaborationGroupView extends ViewPart implements IPartListener {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get the list of selected users that have a Type of AVAILABLE.
|
||||
* Get a unique set of selected users that have a Type of AVAILABLE.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,212 @@
|
|||
package com.raytheon.uf.viz.collaboration.ui.login;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
**/
|
||||
|
||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Combo;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
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.identity.IPresence;
|
||||
import com.raytheon.uf.viz.collaboration.ui.CollaborationUtils;
|
||||
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||
|
||||
/**
|
||||
* Change the user Mode Status and the optional message.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 3, 2012 rferrel Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author rferrel
|
||||
* @version 1.0
|
||||
*/
|
||||
public class ChangeStatusDialog extends CaveSWTDialog {
|
||||
|
||||
private Label userLabel;
|
||||
|
||||
private Combo statusCombo;
|
||||
|
||||
private Text messageTF;
|
||||
|
||||
private LoginData loginData;
|
||||
|
||||
public ChangeStatusDialog(Shell parentShell) {
|
||||
super(parentShell, SWT.DIALOG_TRIM);
|
||||
setText("Collaboration Server Log On");
|
||||
}
|
||||
|
||||
private Control createDialogArea(Composite parent) {
|
||||
GridData gd = null;
|
||||
Composite body = new Composite(parent, SWT.NONE);
|
||||
body.setLayout(new GridLayout(2, false));
|
||||
Label label = null;
|
||||
userLabel = new Label(body, SWT.NONE);
|
||||
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
gd.horizontalSpan = 2;
|
||||
userLabel.setLayoutData(gd);
|
||||
userLabel.setText("");
|
||||
|
||||
label = new Label(body, SWT.NONE);
|
||||
label.setText("Status: ");
|
||||
statusCombo = new Combo(body, SWT.DEFAULT);
|
||||
|
||||
for (IPresence.Mode mode : CollaborationUtils.statusModes) {
|
||||
statusCombo.add(mode.getMode());
|
||||
}
|
||||
|
||||
label = new Label(body, SWT.NONE);
|
||||
label.setText("Message: ");
|
||||
|
||||
messageTF = new Text(body, SWT.BORDER);
|
||||
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
gd.minimumWidth = 200;
|
||||
messageTF.setLayoutData(gd);
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializeComponents(Shell shell) {
|
||||
shell.setLayout(new GridLayout(1, false));
|
||||
createDialogArea(shell);
|
||||
createButtonBar(shell);
|
||||
}
|
||||
|
||||
private void createButtonBar(Composite parent) {
|
||||
GridData gd = null;
|
||||
Composite bar = new Composite(parent, SWT.NONE);
|
||||
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
|
||||
bar.setLayout(new GridLayout(0, true));
|
||||
bar.setLayoutData(gd);
|
||||
createButton(bar, IDialogConstants.OK_ID, "Send", true);
|
||||
|
||||
createButton(bar, IDialogConstants.CANCEL_ID,
|
||||
IDialogConstants.CANCEL_LABEL, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void preOpened() {
|
||||
super.preOpened();
|
||||
this.loginData = LoginDialog.openUserLoginData();
|
||||
userLabel.setText(loginData.getAccount());
|
||||
statusCombo.select(CollaborationUtils.statusModesIndex(loginData
|
||||
.getMode()));
|
||||
statusCombo.select(CollaborationUtils.statusModesIndex(loginData
|
||||
.getMode()));
|
||||
messageTF.setText(loginData.getModeMessage());
|
||||
messageTF.selectAll();
|
||||
statusCombo.setFocus();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new button with the given id.
|
||||
* <p>
|
||||
* The <code>Dialog</code> implementation of this framework method creates a
|
||||
* standard push button, registers it for selection events including button
|
||||
* presses, and registers default buttons with its shell. The button id is
|
||||
* stored as the button's client data. If the button id is
|
||||
* <code>IDialogConstants.CANCEL_ID</code>, the new button will be
|
||||
* accessible from <code>getCancelButton()</code>. If the button id is
|
||||
* <code>IDialogConstants.OK_ID</code>, the new button will be accesible
|
||||
* from <code>getOKButton()</code>. Note that the parent's layout is assumed
|
||||
* to be a <code>GridLayout</code> and the number of columns in this layout
|
||||
* is incremented. Subclasses may override.
|
||||
* </p>
|
||||
*
|
||||
* @param parent
|
||||
* the parent composite
|
||||
* @param id
|
||||
* the id of the button (see <code>IDialogConstants.*_ID</code>
|
||||
* constants for standard dialog button ids)
|
||||
* @param label
|
||||
* the label from the button
|
||||
* @param defaultButton
|
||||
* <code>true</code> if the button is to be the default button,
|
||||
* and <code>false</code> otherwise
|
||||
*
|
||||
* @return the new button
|
||||
*
|
||||
* @see #getCancelButton
|
||||
* @see #getOKButton()
|
||||
*/
|
||||
protected Button createButton(Composite parent, int id, String label,
|
||||
boolean defaultButton) {
|
||||
// increment the number of columns in the button bar
|
||||
((GridLayout) parent.getLayout()).numColumns++;
|
||||
Button button = new Button(parent, SWT.PUSH);
|
||||
button.setText(label);
|
||||
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||
gd.minimumWidth = 70;
|
||||
button.setLayoutData(gd);
|
||||
button.setData(new Integer(id));
|
||||
button.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
Integer val = (Integer) event.widget.getData();
|
||||
if (val != IDialogConstants.OK_ID) {
|
||||
setReturnValue(null);
|
||||
} else {
|
||||
boolean modified = false;
|
||||
IPresence.Mode mode = CollaborationUtils.statusModes[statusCombo
|
||||
.getSelectionIndex()];
|
||||
if (mode != loginData.getMode()) {
|
||||
modified = true;
|
||||
}
|
||||
String modeMessage = messageTF.getText().trim();
|
||||
if (modeMessage.equals(loginData.getModeMessage()) == false) {
|
||||
modified = true;
|
||||
}
|
||||
if (modified) {
|
||||
loginData.setMode(mode);
|
||||
loginData.setModeMessage(modeMessage);
|
||||
LoginDialog.saveUserLoginData(loginData);
|
||||
setReturnValue(loginData);
|
||||
} else {
|
||||
setReturnValue(null);
|
||||
}
|
||||
}
|
||||
ChangeStatusDialog.this.getShell().dispose();
|
||||
}
|
||||
});
|
||||
if (defaultButton) {
|
||||
Shell shell = parent.getShell();
|
||||
if (shell != null) {
|
||||
shell.setDefaultButton(button);
|
||||
}
|
||||
}
|
||||
return button;
|
||||
}
|
||||
}
|
|
@ -232,7 +232,7 @@ public class LoginDialog extends CaveSWTDialog {
|
|||
@Override
|
||||
protected void preOpened() {
|
||||
super.preOpened();
|
||||
initLoginData();
|
||||
this.loginData = LoginDialog.openUserLoginData();
|
||||
userTF.setText(loginData.getUser());
|
||||
serverTF.setText(loginData.getServer());
|
||||
|
||||
|
@ -341,7 +341,7 @@ public class LoginDialog extends CaveSWTDialog {
|
|||
loginData.setModeMessage(modeMessage);
|
||||
}
|
||||
if (doSaveLoginData) {
|
||||
saveLoginData();
|
||||
LoginDialog.saveUserLoginData(loginData);
|
||||
}
|
||||
|
||||
// loginData = new LoginData(user, server, password,
|
||||
|
@ -378,8 +378,8 @@ public class LoginDialog extends CaveSWTDialog {
|
|||
return button;
|
||||
}
|
||||
|
||||
private void initLoginData() {
|
||||
loginData = null;
|
||||
public static LoginData openUserLoginData() {
|
||||
LoginData loginData = null;
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
File fname = pm.getStaticFile(LOGIN_FILE_NAME);
|
||||
try {
|
||||
|
@ -393,9 +393,10 @@ public class LoginDialog extends CaveSWTDialog {
|
|||
loginData = new LoginData();
|
||||
}
|
||||
}
|
||||
return loginData;
|
||||
}
|
||||
|
||||
private void saveLoginData() {
|
||||
public static void saveUserLoginData(LoginData loginData) {
|
||||
try {
|
||||
LocalizationFile lFile = getFile(LOGIN_FILE_NAME);
|
||||
File file = lFile.getFile(false);
|
||||
|
@ -418,7 +419,7 @@ public class LoginDialog extends CaveSWTDialog {
|
|||
* @return lFile
|
||||
* @throws FileNotFoundException
|
||||
*/
|
||||
private LocalizationFile getFile(String filename)
|
||||
private static LocalizationFile getFile(String filename)
|
||||
throws FileNotFoundException {
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
LocalizationContext context = pm.getContext(
|
||||
|
|
|
@ -19,11 +19,16 @@
|
|||
**/
|
||||
package com.raytheon.uf.viz.collaboration.ui.session;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.custom.SashForm;
|
||||
import org.eclipse.swt.custom.StyleRange;
|
||||
import org.eclipse.swt.custom.StyledText;
|
||||
import org.eclipse.swt.events.FocusEvent;
|
||||
import org.eclipse.swt.events.FocusListener;
|
||||
|
@ -40,6 +45,9 @@ import org.eclipse.ui.IPartListener;
|
|||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.part.ViewPart;
|
||||
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.IMessage;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.user.ParticipantRole;
|
||||
import com.raytheon.uf.viz.collaboration.data.CollaborationDataManager;
|
||||
import com.raytheon.uf.viz.collaboration.ui.Activator;
|
||||
import com.raytheon.uf.viz.core.icon.IconUtil;
|
||||
import com.raytheon.viz.ui.perspectives.VizPerspectiveListener;
|
||||
|
@ -222,6 +230,104 @@ public abstract class AbstractSessionView extends ViewPart implements
|
|||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Append the message into the message text field.
|
||||
*
|
||||
* @param message
|
||||
*/
|
||||
public void appendMessage(IMessage message) {
|
||||
String fqName = message.getFrom().getFQName();
|
||||
String name = message.getFrom().getName();
|
||||
long timestamp = message.getTimeStamp();
|
||||
String body = message.getBody();
|
||||
appendMessage(fqName, name, timestamp, body);
|
||||
}
|
||||
|
||||
public void appendMessage(String fqName, String name, long timestamp,
|
||||
String body) {
|
||||
// String fqName = message.getFrom().getFQName();
|
||||
// String name = message.getFrom().getName();
|
||||
if (name == null) {
|
||||
name = fqName.substring(0, fqName.indexOf("@"));
|
||||
}
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTimeInMillis(timestamp);
|
||||
String time = String.format("%1$tI:%1$tM:%1$tS %1$Tp", cal);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (messagesText.getCharCount() != 0) {
|
||||
sb.append("\n");
|
||||
}
|
||||
sb.append("(").append(time).append(") ");
|
||||
int offset = sb.length();
|
||||
|
||||
sb.append(name).append(": ").append(body);
|
||||
|
||||
// here is the place to put the font and color changes for keywords
|
||||
// read in localization file once and then don't read in again, per
|
||||
// chat room?
|
||||
Collection<String> alertWords = findAlertWords(sb,
|
||||
offset + name.length() + 2);
|
||||
List<StyleRange> ranges = new ArrayList<StyleRange>();
|
||||
if (alertWords != null) {
|
||||
for (String keyword : alertWords) {
|
||||
if (sb.toString().toLowerCase().contains(keyword.toLowerCase())) {
|
||||
StyleRange keywordRange = new StyleRange(
|
||||
messagesText.getCharCount()
|
||||
+ sb.toString().toLowerCase()
|
||||
.indexOf(keyword.toLowerCase()),
|
||||
keyword.length(), null, null, SWT.BOLD | SWT.ITALIC);
|
||||
ranges.add(keywordRange);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ParticipantRole[] roles = getRoles(fqName);
|
||||
|
||||
Color color = SessionColorAdvisor.getColor(roles, fqName
|
||||
.equals(CollaborationDataManager.getInstance().getLoginId()));
|
||||
StyleRange range = new StyleRange(messagesText.getCharCount() + offset,
|
||||
name.length() + 1, color, null, SWT.BOLD);
|
||||
messagesText.append(sb.toString());
|
||||
messagesText.setStyleRange(range);
|
||||
for (StyleRange newRange : ranges) {
|
||||
messagesText.setStyleRange(newRange);
|
||||
}
|
||||
messagesText.setTopIndex(messagesText.getLineCount() - 1);
|
||||
|
||||
// room for other fun things here, such as sounds and such
|
||||
executeSightsSounds();
|
||||
}
|
||||
|
||||
/**
|
||||
* Find keys words in body of message starting at offset. /**
|
||||
*
|
||||
* @param builder
|
||||
* @param offset
|
||||
* @return alertWords
|
||||
*/
|
||||
protected Collection<String> findAlertWords(StringBuilder builder,
|
||||
int offset) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of Participant roles the user is assigned for the session.
|
||||
* This sets up a default list of user as a PARTICIPANT.
|
||||
*
|
||||
* @param userId
|
||||
* @return roles
|
||||
*/
|
||||
protected ParticipantRole[] getRoles(String userId) {
|
||||
return new ParticipantRole[] { ParticipantRole.PARTICIPANT };
|
||||
}
|
||||
|
||||
/**
|
||||
* Place holder must override to do something.
|
||||
*/
|
||||
protected void executeSightsSounds() {
|
||||
// placeholder for future things
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
|
|
@ -20,6 +20,9 @@ package com.raytheon.uf.viz.collaboration.ui.session;
|
|||
* further licensing information.
|
||||
**/
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.jface.action.Action;
|
||||
import org.eclipse.jface.action.ActionContributionItem;
|
||||
import org.eclipse.jface.action.IMenuCreator;
|
||||
|
@ -32,7 +35,9 @@ import org.eclipse.ui.IWorkbenchPart;
|
|||
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.IVenueSession;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.info.IVenueInfo;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.user.ParticipantRole;
|
||||
import com.raytheon.uf.viz.collaboration.data.CollaborationDataManager;
|
||||
import com.raytheon.uf.viz.collaboration.data.CollaborationUser;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
|
@ -126,6 +131,43 @@ public class CollaborationSessionView extends SessionView {
|
|||
return COLLABORATION_SESSION_IMAGE_NAME;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.uf.viz.collaboration.ui.session.AbstractSessionView#getRoles
|
||||
* (java.lang.String)
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
protected ParticipantRole[] getRoles(String userId) {
|
||||
for (CollaborationUser u : ((List<CollaborationUser>) usersTable
|
||||
.getInput())) {
|
||||
if (userId.equals(u.getId())) {
|
||||
return u.getRoles();
|
||||
}
|
||||
}
|
||||
return new ParticipantRole[] { ParticipantRole.PARTICIPANT };
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<String> findAlertWords(StringBuilder builder,
|
||||
int offset) {
|
||||
// TODO
|
||||
// 1) if needed read in localized list of key words/sounds
|
||||
// 2) search builder starting at offset for key works. besides the key
|
||||
// words found may also want to return the location(s) of where they are
|
||||
// found along with the sound to used.
|
||||
return super.findAlertWords(builder, offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void executeSightsSounds() {
|
||||
// TODO From the alert words found determine what sound to play and for
|
||||
// how long?
|
||||
super.executeSightsSounds();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
|
|
@ -29,7 +29,6 @@ import com.raytheon.uf.common.status.UFStatus;
|
|||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.CollaborationException;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.IPeerToPeer;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.ISession;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.listener.IMessageListener;
|
||||
import com.raytheon.uf.viz.collaboration.data.CollaborationDataManager;
|
||||
|
||||
|
@ -165,32 +164,42 @@ public class PeerToPeerView extends AbstractSessionView {
|
|||
// Get any open session to send peer-to-peer message
|
||||
IPeerToPeer p2p = null;
|
||||
try {
|
||||
p2p = (IPeerToPeer) CollaborationDataManager.getInstance().getSessionManager().getPeerToPeerSession();
|
||||
p2p = (IPeerToPeer) CollaborationDataManager.getInstance()
|
||||
.getSessionManager().getPeerToPeerSession();
|
||||
} catch (CollaborationException e) {
|
||||
// TODO Auto-generated catch block. Please revise as appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
e);
|
||||
}
|
||||
if(p2p != null) {
|
||||
if (p2p != null) {
|
||||
p2p.sendPeerToPeer(toUser, message);
|
||||
// TODO need to put the message in messag text field here.
|
||||
CollaborationDataManager manager = CollaborationDataManager
|
||||
.getInstance();
|
||||
String fqName = manager.getLoginId();
|
||||
String name = null;
|
||||
long timestamp = System.currentTimeMillis();
|
||||
appendMessage(fqName, name, timestamp, message);
|
||||
}
|
||||
|
||||
// ISession session = CollaborationDataManager.getInstance()
|
||||
// .getSession(null);
|
||||
// if (session != null) {
|
||||
// session.sendTextMessage(toUser, message);
|
||||
// } else {
|
||||
// try {
|
||||
// session = CollaborationDataManager.getInstance()
|
||||
// .getSessionManager().createPeerToPeerSession();
|
||||
// // session.sendTextMessage(toUser, message);
|
||||
// // session.close();
|
||||
// } catch (CollaborationException e) {
|
||||
// // TODO Auto-generated catch block. Please revise as
|
||||
// // appropriate.
|
||||
// statusHandler.handle(Priority.PROBLEM,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// }
|
||||
// }
|
||||
|
||||
// ISession session = CollaborationDataManager.getInstance()
|
||||
// .getSession(null);
|
||||
// if (session != null) {
|
||||
// session.sendTextMessage(toUser, message);
|
||||
// } else {
|
||||
// try {
|
||||
// session = CollaborationDataManager.getInstance()
|
||||
// .getSessionManager().createPeerToPeerSession();
|
||||
// // session.sendTextMessage(toUser, message);
|
||||
// // session.close();
|
||||
// } catch (CollaborationException e) {
|
||||
// // TODO Auto-generated catch block. Please revise as
|
||||
// // appropriate.
|
||||
// statusHandler.handle(Priority.PROBLEM,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@ package com.raytheon.uf.viz.collaboration.ui.session;
|
|||
**/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.jface.action.Action;
|
||||
|
@ -35,11 +34,9 @@ import org.eclipse.jface.viewers.ViewerSorter;
|
|||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.custom.CLabel;
|
||||
import org.eclipse.swt.custom.SashForm;
|
||||
import org.eclipse.swt.custom.StyleRange;
|
||||
import org.eclipse.swt.events.MouseAdapter;
|
||||
import org.eclipse.swt.events.MouseEvent;
|
||||
import org.eclipse.swt.events.MouseTrackAdapter;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
|
@ -71,7 +68,6 @@ import com.raytheon.uf.viz.collaboration.comm.identity.info.IVenueInfo;
|
|||
import com.raytheon.uf.viz.collaboration.comm.identity.user.IVenueParticipant;
|
||||
import com.raytheon.uf.viz.collaboration.comm.identity.user.ParticipantRole;
|
||||
import com.raytheon.uf.viz.collaboration.data.CollaborationDataManager;
|
||||
import com.raytheon.uf.viz.collaboration.data.CollaborationKeywords;
|
||||
import com.raytheon.uf.viz.collaboration.data.CollaborationUser;
|
||||
import com.raytheon.uf.viz.core.VizApp;
|
||||
|
||||
|
@ -99,7 +95,7 @@ public class SessionView extends AbstractSessionView {
|
|||
|
||||
public static final String ID = "com.raytheon.uf.viz.collaboration.SessionView";
|
||||
|
||||
private TableViewer usersTable;
|
||||
protected TableViewer usersTable;
|
||||
|
||||
protected String sessionId;
|
||||
|
||||
|
@ -202,7 +198,7 @@ public class SessionView extends AbstractSessionView {
|
|||
|
||||
@Override
|
||||
public void run() {
|
||||
addMessage(msg);
|
||||
appendMessage(msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -402,94 +398,6 @@ public class SessionView extends AbstractSessionView {
|
|||
}
|
||||
}
|
||||
|
||||
// @SuppressWarnings("unchecked")
|
||||
// public void addUser(CollaborationUser user) {
|
||||
// List<CollaborationUser> list = (List<CollaborationUser>) usersTable
|
||||
// .getInput();
|
||||
// list.add(user);
|
||||
// }
|
||||
//
|
||||
// @SuppressWarnings("unchecked")
|
||||
// public void clearUsers() {
|
||||
// List<CollaborationUser> list = (List<CollaborationUser>) usersTable
|
||||
// .getInput();
|
||||
// list.clear();
|
||||
// ;
|
||||
// }
|
||||
//
|
||||
// @SuppressWarnings("unchecked")
|
||||
// public void removeUser(CollaborationUser user) {
|
||||
// List<CollaborationUser> list = (List<CollaborationUser>) usersTable
|
||||
// .getInput();
|
||||
// list.remove(user);
|
||||
// }
|
||||
|
||||
public void addMessage(IMessage message) {
|
||||
String name = message.getFrom().getFQName();
|
||||
String user = message.getFrom().getName();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTimeInMillis(message.getTimeStamp());
|
||||
String time = String.format("%1$tI:%1$tM:%1$tS %1$Tp", cal);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (messagesText.getCharCount() != 0) {
|
||||
sb.append("\n");
|
||||
}
|
||||
int offset = 0;
|
||||
sb.append("(").append(time).append(") ");
|
||||
offset = sb.length();
|
||||
|
||||
sb.append(user).append(": ").append(message.getBody());
|
||||
|
||||
// here is the place to put the font and color changes for keywords
|
||||
// read in localization file once and then don't read in again, per
|
||||
// chat room?
|
||||
List<String> keywords = CollaborationKeywords.parseKeywords();
|
||||
List<StyleRange> ranges = new ArrayList<StyleRange>();
|
||||
if (keywords != null) {
|
||||
for (String keyword : keywords) {
|
||||
if (sb.toString().toLowerCase().contains(keyword.toLowerCase())) {
|
||||
StyleRange keywordRange = new StyleRange(
|
||||
messagesText.getCharCount()
|
||||
+ sb.toString().toLowerCase()
|
||||
.indexOf(keyword.toLowerCase()),
|
||||
keyword.length(), null, null, SWT.BOLD | SWT.ITALIC);
|
||||
ranges.add(keywordRange);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ParticipantRole[] type = null;
|
||||
for (CollaborationUser u : (List<CollaborationUser>) usersTable
|
||||
.getInput()) {
|
||||
if (name.equals(u.getId())) {
|
||||
type = u.getRoles();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Color color = SessionColorAdvisor.getColor(type, name
|
||||
.equals(CollaborationDataManager.getInstance().getLoginId()));
|
||||
StyleRange range = new StyleRange(messagesText.getCharCount() + offset,
|
||||
user.length() + 1, color, null, SWT.BOLD);
|
||||
messagesText.append(sb.toString());
|
||||
messagesText.setStyleRange(range);
|
||||
for (StyleRange newRange : ranges) {
|
||||
messagesText.setStyleRange(newRange);
|
||||
}
|
||||
messagesText.setTopIndex(messagesText.getLineCount() - 1);
|
||||
|
||||
// room for other fun things here, such as sounds and such
|
||||
executeSightsSounds();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void executeSightsSounds() {
|
||||
// TODO Auto-generated method stub
|
||||
// placeholder for future things
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
|
Loading…
Add table
Reference in a new issue