blob: 0e7424641ebf623cbd32deeb9db8d004feac71ae [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2018 vogella GmbH 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:
* Simon Scholz <simon.scholz@vogella.com> - initial API and implementation based on SWTObservable.getRealm
*******************************************************************************/
package org.eclipse.jface.databinding.swt;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.swt.widgets.Display;
/**
* This class is used to get a {@link Realm} for a certain {@link Display}.
*
* @since 1.7
*
*/
public class DisplayRealm extends Realm {
private static List<DisplayRealm> realms = new ArrayList<DisplayRealm>();
/**
* Returns the realm representing the UI thread for the given display.
*
* @param display
* @return the realm representing the UI thread for the given display
*/
public static Realm getRealm(final Display display) {
synchronized (realms) {
for (DisplayRealm element : realms) {
if (element.display == display) {
return element;
}
}
DisplayRealm result = new DisplayRealm(display);
realms.add(result);
return result;
}
}
private Display display;
/**
* @param display
*/
private DisplayRealm(Display display) {
this.display = display;
}
@Override
public boolean isCurrent() {
return Display.getCurrent() == display;
}
@Override
public void asyncExec(final Runnable runnable) {
Runnable safeRunnable = () -> safeRun(runnable);
if (!display.isDisposed()) {
display.asyncExec(safeRunnable);
}
}
@Override
public void timerExec(int milliseconds, final Runnable runnable) {
if (!display.isDisposed()) {
Runnable safeRunnable = () -> safeRun(runnable);
display.timerExec(milliseconds, safeRunnable);
}
}
@Override
public int hashCode() {
return (display == null) ? 0 : display.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final DisplayRealm other = (DisplayRealm) obj;
if (display == null) {
if (other.display != null)
return false;
} else if (!display.equals(other.display))
return false;
return true;
}
}