/*******************************************************************************
* 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.project.ui.upgrade.action;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.project.ui.dialog.CustomProjectSelectionDialog;
import com.liferay.ide.sdk.core.ISDKConstants;
import com.liferay.ide.sdk.core.SDK;
import com.liferay.ide.sdk.core.SDKUtil;
import com.liferay.ide.ui.util.UIUtil;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.window.Window;
import org.eclipse.sapphire.ui.Presentation;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.IConsole;
/**
* @author Terry Jia
* @author Andy Wu
*/
@SuppressWarnings( "restriction" )
public class BuildServiceActionHandler extends BaseActionHandler
{
private void deleteLegacyFiles( IProject project, IProgressMonitor monitor ) throws CoreException
{
String relativePath = "/docroot/WEB-INF/src/META-INF";
IFile portletSpringXML = project.getFile( relativePath + "/portlet-spring.xml" );
IFile shardDataSourceSpringXML = project.getFile( relativePath + "/shard-data-source-spring.xml" );
if( portletSpringXML.exists() )
{
portletSpringXML.delete( true, monitor );
}
if( shardDataSourceSpringXML.exists() )
{
shardDataSourceSpringXML.delete( true, monitor );
}
}
private List<IProject> getServiceBuilderProjects()
{
List<IProject> results = new ArrayList<IProject>();
IProject[] projects = CoreUtil.getAllProjects();
for( IProject project : projects )
{
IFile serviceFile = project.getFile( "/docroot/WEB-INF/service.xml" );
if( serviceFile.exists() )
{
results.add( project );
}
}
return results;
}
@Override
protected Object run( Presentation context )
{
List<IProject> projects = getServiceBuilderProjects();
CustomProjectSelectionDialog dialog =
new CustomProjectSelectionDialog( UIUtil.getActiveShell() );
dialog.setProjects( projects );
List<IProject> liferayServiceProjects = new ArrayList<>();
if( dialog.open() == Window.OK )
{
final Object[] selectedProjects = dialog.getResult();
if( selectedProjects != null )
{
for( Object project : selectedProjects )
{
if( project instanceof IJavaProject )
{
IJavaProject p = (IJavaProject) project;
liferayServiceProjects.add( p.getProject() );
}
}
}
}
try
{
PlatformUI.getWorkbench().getProgressService().busyCursorWhile( new IRunnableWithProgress()
{
public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException
{
try
{
for( IProject project : liferayServiceProjects )
{
deleteLegacyFiles( project, monitor );
SDK sdk = SDKUtil.getSDK( project );
sdk.runCommand( project, project.getFile( "build.xml" ), ISDKConstants.TARGET_BUILD_SERVICE,
null, monitor );
project.refreshLocal( IResource.DEPTH_INFINITE, monitor );
IConsole console = CompileAction.getConsole( "build-service" );
if( console != null )
{
ProcessConsole pc = (ProcessConsole) console;
if( pc.getDocument().get().contains( "BUILD FAILED" ) )
{
return;
}
}
}
}
catch( CoreException e )
{
}
}
} );
}
catch( Exception e )
{
}
return null;
}
}