package org.flowerplatform.eclipse;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.browser.Browser;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.flowerplatform.eclipse.part.FlowerDiagramEditor;
import org.flowerplatform.editor.EditorPlugin;
/**
* @author Sebastian Solomon
*
*/
public class AddElementsOnDiagramHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
FlowerDiagramEditor flowerEditor = null;
ISelection sel = HandlerUtil.getActiveMenuSelection(event);
IStructuredSelection selection = (IStructuredSelection) sel;
Iterator iterator = selection.iterator();
List<String> paths = new ArrayList<>();
while (iterator.hasNext()) {
Object element = iterator.next();
if (element instanceof IFile) {
String path = EditorPlugin.getInstance().getFileAccessController().getPath(element);
paths.add(path);
}
}
flowerEditor = findLastOpendDiagramEditor();
if (flowerEditor != null) {
final Browser browser = flowerEditor.getBrowser();
browser.execute("dragOnDiagram('" + paths + "')");
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(flowerEditor);
}
return null;
}
protected FlowerDiagramEditor findLastOpendDiagramEditor() {
FlowerDiagramEditor flowerEditor = null;
IEditorPart activeEditor = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage()
.getActiveEditor();
if (activeEditor instanceof FlowerDiagramEditor) {
return (FlowerDiagramEditor)activeEditor;
}else {
IEditorReference[] editorReference = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage()
.getEditorReferences();
for (int i = editorReference.length - 1; i >= 0 ; i--) {
IEditorPart edit = editorReference[i].getEditor(false);
if (edit instanceof FlowerDiagramEditor) {
return (FlowerDiagramEditor)edit;
}
}
}
return flowerEditor;
}
}