/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * 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. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.ui; import com.liferay.ide.core.ILiferayProjectImporter; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.ui.util.UIUtil; import java.io.File; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; /** * @author Gregory Amerson */ @SuppressWarnings( "restriction" ) public class WorkspaceHelper implements WorkspaceHelperMBean { @Override public String openDir( String path ) { String retval = null; final File dir = new File( path ); if( ( !dir.exists() ) || ( !dir.isDirectory() ) ) { retval = "Directory doesn't exist or isn't a directory."; } final File dotProject = new File( dir, ".project" ); if ( dotProject.exists() ) { retval = importExistingProject( dir ); } else { for( ILiferayProjectImporter importer : LiferayCore.getImporters() ) { try { final IStatus importStatus = importer.canImport( dir.getCanonicalPath() ); if( importStatus != null && importStatus.isOK() ) { UIUtil.async( new Runnable() { @Override public void run() { try { new ProgressMonitorDialog( UIUtil.getActiveShell() ).run(true, true, new IRunnableWithProgress() { @Override public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException { try { importer.importProject( path, monitor ); } catch( CoreException e ) { LiferayUIPlugin.logError( "Error opening project", e ); } } }); } catch( InvocationTargetException | InterruptedException e ) { } } }); return retval; } } catch( Exception e ) { } } retval = "Directory must have a .project file to open."; } return retval; } private String importExistingProject( File dir ) { String retval = null; try { final IWorkspace workspace = ResourcesPlugin.getWorkspace(); final IProjectDescription description = workspace.loadProjectDescription( new Path( dir.getAbsolutePath() ).append( ".project" ) ); final String name = description.getName(); final IProject project = workspace.getRoot().getProject( name ); if( project.exists() ) { retval = "Project with name " + name + " already exists"; } else { final IRunnableWithProgress runnable = new IRunnableWithProgress() { @Override public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException { try { project.create( description, monitor ); project.open( IResource.BACKGROUND_REFRESH, monitor ); try { project.refreshLocal( IResource.DEPTH_INFINITE, monitor ); } catch( CoreException e) { // ignore error this is just best effort } final IWorkbench workbench = PlatformUI.getWorkbench(); final Shell shell = workbench.getActiveWorkbenchWindow().getShell(); shell.forceActive(); shell.forceFocus(); PackageExplorerPart view = PackageExplorerPart.openInActivePerspective(); view.selectAndReveal( project ); } catch( CoreException e ) { LiferayUIPlugin.logError( "Unable to import project " + name, e ); } } }; UIUtil.async( new Runnable() { @Override public void run() { try { new ProgressMonitorDialog( UIUtil.getActiveShell() ).run( true, true, runnable ); } catch( InvocationTargetException | InterruptedException e ) { } } }); } } catch( CoreException e ) { retval = e.getMessage(); } return retval; } }