blob: 5e18a0ef93a9fb6cd10d2164b8d83abb7fdd9599 [file] [log] [blame]
/*
* Copyright (c) 2009-2012, 2015 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.internal.ui.views;
import org.eclipse.emf.cdo.internal.ui.messages.Messages;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.session.remote.CDORemoteSession;
import org.eclipse.emf.cdo.session.remote.CDORemoteSessionManager;
import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.ui.UIUtil;
import org.eclipse.net4j.util.ui.views.ContainerView;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import java.text.MessageFormat;
/**
* @author Eike Stepper
*/
public class CDORemoteSessionsView extends ContainerView.Default<CDORemoteSessionManager>
{
public static final String ID = "org.eclipse.emf.cdo.ui.CDORemoteSessionsView"; //$NON-NLS-1$
private static final String TYPE_TEXT_MESSAGE = "org.eclipse.emf.cdo.ui.TextMessage"; //$NON-NLS-1$
private ISelectionListener selectionListener = new ISelectionListener()
{
public void selectionChanged(IWorkbenchPart part, ISelection selection)
{
if (part != CDORemoteSessionsView.this)
{
Object object = UIUtil.getElementIfOne(selection);
CDOSession session = CDOUtil.getSession(object);
if (session != null)
{
setContainer(session.getRemoteSessionManager());
}
}
}
};
private IListener containerListener = new CDORemoteSessionManager.EventAdapter()
{
@Override
protected void onLocalSubscriptionChanged(boolean subscribed)
{
getViewer().getControl().setEnabled(subscribed);
}
@Override
protected void onSubscribed(CDORemoteSession remoteSession)
{
refreshElement(remoteSession, true);
}
@Override
protected void onUnsubscribed(CDORemoteSession remoteSession)
{
refreshElement(remoteSession, true);
}
@Override
protected void onMessageReceived(final CDORemoteSession remoteSession, final CDORemoteSessionMessage message)
{
if (TYPE_TEXT_MESSAGE.equals(message.getType()))
{
try
{
getDisplay().asyncExec(new Runnable()
{
public void run()
{
try
{
MessageDialog.openInformation(getShell(),
MessageFormat.format(Messages.getString("CDORemoteSessionsView_0"), remoteSession), //$NON-NLS-1$
new String(message.getData()));
}
catch (RuntimeException ignore)
{
// ignore
}
}
});
}
catch (RuntimeException ignore)
{
// ignore
}
}
}
};
public CDORemoteSessionsView()
{
}
@Override
public void dispose()
{
getSite().getWorkbenchWindow().getSelectionService().removePostSelectionListener(selectionListener);
super.dispose();
}
@Override
protected Control createUI(Composite parent)
{
Control control = super.createUI(parent);
getViewer().getControl().setEnabled(false);
getSite().getWorkbenchWindow().getSelectionService().addPostSelectionListener(selectionListener);
return control;
}
@Override
protected IListener getContainerListener()
{
return containerListener;
}
@Override
protected Color getElementForeground(Object element)
{
if (element instanceof CDORemoteSession)
{
CDORemoteSession remoteSession = (CDORemoteSession)element;
if (!remoteSession.isSubscribed())
{
return getDisplay().getSystemColor(SWT.COLOR_GRAY);
}
}
return null;
}
@Override
protected void doubleClicked(Object element)
{
if (element instanceof CDORemoteSession)
{
CDORemoteSession remoteSession = (CDORemoteSession)element;
if (remoteSession.isSubscribed())
{
InputDialog dlg = new InputDialog(getShell(),
MessageFormat.format(Messages.getString("CDORemoteSessionsView_1"), remoteSession), //$NON-NLS-1$
Messages.getString("CDORemoteSessionsView_2"), "", null); //$NON-NLS-1$ //$NON-NLS-2$
if (dlg.open() == InputDialog.OK)
{
String message = dlg.getValue();
remoteSession.sendMessage(new CDORemoteSessionMessage(TYPE_TEXT_MESSAGE, message.getBytes()));
}
return;
}
}
super.doubleClicked(element);
}
}