package com.liferay.ide.project.ui.handlers; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.project.core.ProjectCore; import com.liferay.ide.project.ui.ProjectUI; import com.liferay.ide.sdk.core.SDK; import com.liferay.ide.sdk.core.SDKUtil; 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.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.internal.ui.packageview.PackageFragmentRootContainer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.handlers.HandlerUtil; /** * @author Simon Jiang * @author Kuo Zhang */ @SuppressWarnings( "restriction" ) public abstract class SDKCommandHandler extends AbstractHandler { @Override public Object execute( ExecutionEvent event ) throws ExecutionException { IStatus retval = null; IProject project = null; final ISelection selection = HandlerUtil.getCurrentSelection( event ); if( selection instanceof IStructuredSelection ) { final IStructuredSelection structuredSelection = (IStructuredSelection) selection; final Object selected = structuredSelection.getFirstElement(); if( selected instanceof IResource ) { project = ( (IResource) selected ).getProject(); } else if( selected instanceof IJavaElement ) { project = ( (IJavaElement) selected ).getJavaProject().getProject(); } else if( selected instanceof PackageFragmentRootContainer ) { project = ( (PackageFragmentRootContainer) selected ).getJavaProject().getProject(); } } if( project == null ) { final IEditorInput editorInput = HandlerUtil.getActiveEditorInput( event ); if( editorInput != null && editorInput.getAdapter( IResource.class ) != null ) { project = ( (IResource) editorInput.getAdapter( IResource.class ) ).getProject(); } } final boolean isLiferay = CoreUtil.isLiferayProject( project ); if( isLiferay ) { if( SDKUtil.isSDKProject( project ) ) { retval = executeSdkCommand( project ); } } return retval; } protected IStatus executeSdkCommand( final IProject project ) { IStatus retval = null; try { final IFile buildXmlFile = project.getFile( "build.xml" ); if( buildXmlFile.exists() ) { final IProject p = project; final IFile buildFile = buildXmlFile; new Job( p.getName() + " : " + getSDKCommand() ) { @Override protected IStatus run( IProgressMonitor monitor ) { try { final SDK sdk = SDKUtil.getSDK( p ); sdk.runCommand( p, buildFile, getSDKCommand(), null, monitor ); p.refreshLocal( IResource.DEPTH_INFINITE, monitor ); } catch( Exception e ) { return ProjectUI.createErrorStatus( "Error running SDK command " + getSDKCommand(), e ); } return Status.OK_STATUS; } }.schedule(); } } catch( Exception e ) { retval = ProjectCore.createErrorStatus( "Unable to execute sdk command", e ); } return retval; } protected abstract String getSDKCommand(); }