org.eclipse.egit.ui.internal.repository.DropAdapterAssistant.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.egit.ui.internal.repository.DropAdapterAssistant.java

Source

/*******************************************************************************
 * Copyright (c) 2010 SAP AG.
 * 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:
 *    Mathias Kinzler (SAP AG) - initial implementation
 *******************************************************************************/
package org.eclipse.egit.ui.internal.repository;

import java.io.File;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.egit.ui.Activator;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.RepositoryCache.FileKey;
import org.eclipse.jgit.util.FS;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.ui.navigator.CommonDropAdapter;
import org.eclipse.ui.navigator.CommonDropAdapterAssistant;

/**
 * Drop Adapter Assistant for the Repositories View
 */
public class DropAdapterAssistant extends CommonDropAdapterAssistant {
    /**
     * Default constructor
     */
    public DropAdapterAssistant() {
        // nothing
    }

    @Override
    public IStatus handleDrop(CommonDropAdapter aDropAdapter, DropTargetEvent aDropTargetEvent, Object aTarget) {
        String[] data = (String[]) aDropTargetEvent.data;
        for (String folder : data) {
            File repoFile = new File(folder);
            if (FileKey.isGitRepository(repoFile, FS.DETECTED))
                Activator.getDefault().getRepositoryUtil().addConfiguredRepository(repoFile);
            // also a direct parent of a .git dir is allowed
            else if (!repoFile.getName().equals(Constants.DOT_GIT)) {
                File dotgitfile = new File(repoFile, Constants.DOT_GIT);
                if (FileKey.isGitRepository(dotgitfile, FS.DETECTED))
                    Activator.getDefault().getRepositoryUtil().addConfiguredRepository(dotgitfile);
            }
        }
        // the returned Status is not consumed anyway
        return Status.OK_STATUS;
    }

    @Override
    public IStatus validateDrop(Object target, int operation, TransferData transferData) {
        // check that all paths are valid repository paths
        String[] folders = (String[]) FileTransfer.getInstance().nativeToJava(transferData);
        for (String folder : folders) {
            File repoFile = new File(folder);
            if (FileKey.isGitRepository(repoFile, FS.DETECTED)) {
                continue;
            }
            // convenience: also allow the direct parent of .git
            if (!repoFile.getName().equals(Constants.DOT_GIT)) {
                File dotgitfile = new File(repoFile, Constants.DOT_GIT);
                if (FileKey.isGitRepository(dotgitfile, FS.DETECTED))
                    continue;
            }
            return Status.CANCEL_STATUS;
        }
        return Status.OK_STATUS;
    }

    @Override
    public boolean isSupportedType(TransferData aTransferType) {
        return FileTransfer.getInstance().isSupportedType(aTransferType);
    }
}