/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.ui.explorer; import java.util.ArrayList; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.views.navigator.NavigatorDropAdapter; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.core.workspace.DotProjectUtils; import org.teiid.designer.ui.UiConstants; import org.teiid.designer.ui.common.widget.ListMessageDialog; /** * @author SDelap * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates * * @since 8.0 */ public class ModelExplorerDropAdapter extends NavigatorDropAdapter { /** * @param viewer */ public ModelExplorerDropAdapter(StructuredViewer viewer) { super(viewer); } /* * (non-Javadoc) * * @see org.eclipse.swt.dnd.DropTargetListener#drop(org.eclipse.swt.dnd.DropTargetEvent) */ @Override public void drop(DropTargetEvent event) { Object data = event.data; try { if (data instanceof IResource) { if (DotProjectUtils.getDotProjectCount((IResource) data, true, false) > 0) { ErrorDialog.openError(getViewer().getControl().getShell(), UiConstants.Util.getString("ModelExplorerDropAdapter.dotProjectResourceDropErrorTitle"), UiConstants.Util.getString("ModelExplorerDropAdapter.dotProjectResourceDropErrorMessage"), null); //$NON-NLS-1$//$NON-NLS-2$ event.detail = DND.DROP_NONE; } else { performDrop(data); } } else { String[] files = (String[]) data; ArrayList projects = new ArrayList(); ArrayList nonProjectFiles = new ArrayList(); ArrayList invalidProjects = new ArrayList(); for (int i = 0; i < files.length; i++) { //Check For Top Level .project int projectCount = DotProjectUtils.getDotProjectCount( files[i], true, false); if (projectCount == 1) { if (DotProjectUtils.getDotProjectCount(files[i], false, false) == 1) { if (files[i].indexOf(DotProjectUtils.DOT_PROJECT) > 0) { invalidProjects.add(files[i]); } else { projects.add(files[i]); } } } else if (projectCount == 0) { nonProjectFiles.add(files[i]); } else { invalidProjects.add(files[i]); } } if (nonProjectFiles.size() > 0 && (projects.size() > 0 || invalidProjects.size() > 0)) { MessageBox messageBox = new MessageBox(getViewer().getControl().getShell(), SWT.ICON_QUESTION | SWT.YES | SWT.NO); messageBox.setMessage(UiConstants.Util.getString("ModelExplorerDropAdapter.mixedDropQuestion")); //$NON-NLS-1$ int rc = messageBox.open(); if (rc == SWT.YES) { handleProjectImport(projects, invalidProjects); } else { event.detail = DND.DROP_NONE; } } else { if (nonProjectFiles.size() > 0) { performDrop(nonProjectFiles.toArray(new String[0])); } else { handleProjectImport(projects, invalidProjects); } } } } catch (Exception ce) { event.detail = DND.DROP_NONE; } } private void handleProjectImport(ArrayList projects, ArrayList invalidProjects) { for (int i = 0; i < projects.size(); i++) { createExistingProject((String) projects.get(i)); } if (invalidProjects.size() > 0) { ListMessageDialog.openError(getViewer().getControl().getShell(), UiConstants.Util.getString("ModelExplorerDropAdapter.invalidProjectErrorTitle"), null, UiConstants.Util.getString("ModelExplorerDropAdapter.invalidProjectErrorMessage"), invalidProjects, null); //$NON-NLS-1$ //$NON-NLS-2$ } } private void createExistingProject(String projectFolder) { try { final IProjectDescription description = ModelerCore.getWorkspace().loadProjectDescription(new Path(projectFolder + "//.project")); //$NON-NLS-1$ final IProject project = ModelerCore.getWorkspace().getRoot().getProject(description.getName()); // create the new project operation WorkspaceModifyOperation op = new WorkspaceModifyOperation() { @Override protected void execute(IProgressMonitor monitor) throws CoreException { monitor.beginTask("", 2000); //$NON-NLS-1$ project.create(description, new SubProgressMonitor(monitor, 1000)); if (monitor.isCanceled()) throw new OperationCanceledException(); project.open(new SubProgressMonitor(monitor, 1000)); } }; // run the new project creation operation ProgressMonitorDialog dialog = new ProgressMonitorDialog( getViewer().getControl().getShell()); dialog.run(true, true, op); } catch (Exception e) { e.printStackTrace(); } } }