/*****************************************************************************
 *  Limpet - the Lightweight InforMation ProcEssing Toolkit
 *  http://limpet.info
 *
 *  (C) 2015-2016, Deep Blue C Technologies Ltd
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the Eclipse Public License v1.0
 *  (http://www.eclipse.org/legal/epl-v10.html)
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *****************************************************************************/
package info.limpet.ui.editors;

import info.limpet.IStoreItem;
import info.limpet.stackedcharts.ui.view.adapter.AdapterRegistry;
import info.limpet.ui.data_provider.data.LimpetWrapper;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.swt.dnd.DragSourceAdapter;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.TextTransfer;

public class LimpetDragListener extends DragSourceAdapter
{
  public static final String SEPARATOR = "__";
  private StructuredViewer viewer;

  public LimpetDragListener(StructuredViewer viewer)
  {
    this.viewer = viewer;
  }
  
  

  @Override
  public void dragFinished(DragSourceEvent event)
  {
    LocalSelectionTransfer.getTransfer().setSelection(null);
    if (!event.doit)
    {
      return;
    }
  }

  /**
   * Method declared on DragSourceListener
   */
  public void dragSetData(DragSourceEvent event)
  {
    IStructuredSelection selection =
        (IStructuredSelection) viewer.getSelection();

    if (TextTransfer.getInstance().isSupportedType(event.dataType))
    {

      StringBuffer items = new StringBuffer();
      Iterator<?> iter = selection.iterator();
      while (iter.hasNext())
      {
        LimpetWrapper object = (LimpetWrapper) iter.next();
        IStoreItem si = (IStoreItem) object.getSubject();
        items.append(si.getUUID().toString());
        items.append(SEPARATOR);
      }
      event.data = items.toString();
    }
    if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType))
    {
      
      LocalSelectionTransfer.getTransfer().setSelection(selection);
      event.data = selection;
    }
  }

  /**
   * Method declared on DragSourceListener
   */
  public void dragStart(DragSourceEvent event)
  {
    event.doit = !viewer.getSelection().isEmpty();
    LocalSelectionTransfer.getTransfer().setSelection(viewer.getSelection());
  }
}

/*****************************************************************************
 *  Limpet - the Lightweight InforMation ProcEssing Toolkit
 *  http://limpet.info
 *
 *  (C) 2015-2016, Deep Blue C Technologies Ltd
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the Eclipse Public License v1.0
 *  (http://www.eclipse.org/legal/epl-v10.html)
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *****************************************************************************/
package info.limpet.ui.editors;

import info.limpet.IStoreItem;
import info.limpet.ui.data_provider.data.LimpetWrapper;

import java.util.Iterator;

import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.swt.dnd.DragSourceAdapter;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.TextTransfer;

public class LimpetDragListener extends DragSourceAdapter
{
  public static final String SEPARATOR = "__";
  private StructuredViewer viewer;

  public LimpetDragListener(StructuredViewer viewer)
  {
    this.viewer = viewer;
  }
  
  

  @Override
  public void dragFinished(DragSourceEvent event)
  {
    LocalSelectionTransfer.getTransfer().setSelection(null);
    if (!event.doit)
    {
      return;
    }
  }

  /**
   * Method declared on DragSourceListener
   */
  public void dragSetData(DragSourceEvent event)
  {
    IStructuredSelection selection =
        (IStructuredSelection) viewer.getSelection();

    if (TextTransfer.getInstance().isSupportedType(event.dataType))
    {

      StringBuffer items = new StringBuffer();
      Iterator<?> iter = selection.iterator();
      while (iter.hasNext())
      {
        LimpetWrapper object = (LimpetWrapper) iter.next();
        IStoreItem si = (IStoreItem) object.getSubject();
        items.append(si.getUUID().toString());
        items.append(SEPARATOR);
      }
      event.data = items.toString();
    }
    if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType))
    {
      
      LocalSelectionTransfer.getTransfer().setSelection(selection);
      event.data = selection;
    }
  }

  /**
   * Method declared on DragSourceListener
   */
  public void dragStart(DragSourceEvent event)
  {
    event.doit = !viewer.getSelection().isEmpty();
    LocalSelectionTransfer.getTransfer().setSelection(viewer.getSelection());
  }
}

fix imports