/******************************************************************************* * Copyright (c) 2012, 2013 Tasktop Technologies 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: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.commons.workbench; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.ui.IWorkbenchPart; /** * Provides a hook for accessing the part when opening an element in an editor. This class should only be accessed from * the SWT thread. * * @author Steffen Pingel */ public class EditorHandle implements IAdaptable { private Object item; private IWorkbenchPart part; private IStatus status; private final CountDownLatch progressLatch = new CountDownLatch(1); /** * Constructs a handle with a status. * * @param status * specifies the result of opening the editor * @see #getStatus() */ public EditorHandle(IStatus status) { this.status = status; } public EditorHandle() { } public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) { return Platform.getAdapterManager().getAdapter(this, adapter); } /** * Returns the item that was opened. * * @return null, if no item is associated with the editor */ public Object getItem() { return item; } /** * Returns the editor part. * * @return the editor or null if the editor is not open, yet, or does not a workbench part */ public IWorkbenchPart getPart() { return part; } /** * Returns the result of opening the editor. * * @return a severity of {@link IStatus#OK} indicates that the operation was successful. */ public IStatus getStatus() { return status; } /** * Sets the item that was opened. * * @see {@link #getItem()} */ public void setItem(Object item) { this.item = item; } /** * Sets the editor part that was opened. * * @see {@link #getPart()} */ public void setPart(IWorkbenchPart part) { this.part = part; } /** * Sets the result of the open operation. * * @see {@link #getStatus()} */ public void setStatus(IStatus status) { this.status = status; this.progressLatch.countDown(); } public boolean await(long timeout, TimeUnit unit) throws InterruptedException { return this.progressLatch.await(timeout, unit); } }