Package org.erlide.ui.navigator.dnd

Source Code of org.erlide.ui.navigator.dnd.ErlCommonDropAdapterAssistant

package org.erlide.ui.navigator.dnd;

import java.util.List;

import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.ui.navigator.CommonDropAdapter;
import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
import org.erlide.util.ErlLogger;
import org.erlide.util.services.ExtensionUtils;

public class ErlCommonDropAdapterAssistant extends CommonDropAdapterAssistant {

    final static String EXTENSION_POINT_ID = "org.erlide.ui.erlDndAdapter";
    protected IStatus status;

    void setStatus(final IStatus status) {
        this.status = status;
    }

    public ErlCommonDropAdapterAssistant() {
    }

    @Override
    public IStatus handleDrop(final CommonDropAdapter dropAdapter,
            final DropTargetEvent dropTargetEvent, final Object target) {
        status = Status.CANCEL_STATUS;
        try {
            final List<INavigatorDropHandler> handlers = ExtensionUtils.getExtensions(
                    EXTENSION_POINT_ID, INavigatorDropHandler.class);
            for (final INavigatorDropHandler handler : handlers) {
                final ISafeRunnable runnable = new ISafeRunnable() {

                    @Override
                    public void handleException(final Throwable exception) {
                        ErlLogger.error(exception);
                    }

                    @Override
                    public void run() throws Exception {
                        final IStatus theStatus = handler.handleDrop(dropAdapter,
                                dropTargetEvent, target);
                        setStatus(theStatus);
                    }
                };
                SafeRunner.run(runnable);
            }
        } catch (final Exception ex) {
            ErlLogger.warn(ex);
        }
        return status;
    }

    @Override
    public IStatus validateDrop(final Object target, final int operation,
            final TransferData transferType) {
        status = Status.CANCEL_STATUS;
        try {
            final IConfigurationElement[] config = Platform.getExtensionRegistry()
                    .getConfigurationElementsFor(EXTENSION_POINT_ID);
            for (final IConfigurationElement e : config) {
                final Object o = e.createExecutableExtension("class");
                if (o instanceof INavigatorDropHandler) {
                    final ISafeRunnable runnable = new ISafeRunnable() {

                        @Override
                        public void handleException(final Throwable exception) {
                            ErlLogger.error("Exception in client");
                        }

                        @Override
                        public void run() throws Exception {
                            final IStatus theStatus = ((INavigatorDropHandler) o)
                                    .validateDrop(target, operation, transferType);
                            setStatus(theStatus);
                        }
                    };
                    SafeRunner.run(runnable);
                }
            }
        } catch (final Exception ex) {
            ErlLogger.error(ex);
        }
        return status;
    }
}
TOP

Related Classes of org.erlide.ui.navigator.dnd.ErlCommonDropAdapterAssistant

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.