/*******************************************************************************
* 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.service.core;
import com.liferay.ide.core.ILiferayPortal;
import com.liferay.ide.core.ILiferayProject;
import com.liferay.ide.core.IWebProject;
import com.liferay.ide.core.LiferayCore;
import com.liferay.ide.project.core.ProjectCore;
import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.project.core.util.WizardUtil;
import com.liferay.ide.service.core.operation.INewServiceBuilderDataModelProperties;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.osgi.framework.Version;
/**
* @author Gregory Amerson
* @author Cindy Li
*/
@SuppressWarnings( { "restriction" } )
public class AddServiceBuilderOperation extends AbstractDataModelOperation
implements INewServiceBuilderDataModelProperties
{
public AddServiceBuilderOperation( IDataModel model )
{
super( model );
}
public void createDefaultServiceBuilderFile( IFile serviceBuilderFile, IProgressMonitor monitor )
throws CoreException
{
String descriptorVersion = null;
try
{
final ILiferayProject liferayProject = LiferayCore.create( serviceBuilderFile.getProject() );
final ILiferayPortal portal = liferayProject.adapt( ILiferayPortal.class );
final Version portalVersion = new Version( portal.getVersion() );
descriptorVersion = portalVersion.getMajor() + "." + portalVersion.getMinor() + ".0"; //$NON-NLS-1$//$NON-NLS-2$
}
catch( Exception e )
{
ProjectCore.logError( "Could not determine liferay runtime version", e ); //$NON-NLS-1$
descriptorVersion = "6.0.0"; //$NON-NLS-1$
}
WizardUtil.createDefaultServiceBuilderFile(
serviceBuilderFile, descriptorVersion, getDataModel().getBooleanProperty( USE_SAMPLE_TEMPLATE ),
getDataModel().getStringProperty( PACKAGE_PATH ), getDataModel().getStringProperty( NAMESPACE ),
getDataModel().getStringProperty( AUTHOR ), monitor );
getDataModel().setProperty( CREATED_SERVICE_FILE, serviceBuilderFile );
}
private IStatus createServiceBuilderFile( IProject project, IProgressMonitor monitor )
{
// IDE-110 IDE-648
final IWebProject webproject = LiferayCore.create( IWebProject.class, project );
if( webproject == null || webproject.getDefaultDocrootFolder() == null )
{
return ServiceCore.createErrorStatus( "Could not find webapp root folder." ); //$NON-NLS-1$
}
final IFolder defaultDocroot = webproject.getDefaultDocrootFolder();
final Path path = new Path( "WEB-INF/" + getDataModel().getStringProperty( SERVICE_FILE ) ); //$NON-NLS-1$
final IFile serviceBuilderFile = defaultDocroot.getFile( path );
if( !serviceBuilderFile.exists() )
{
try
{
createDefaultServiceBuilderFile( serviceBuilderFile, monitor );
}
catch( Exception ex )
{
return ServiceCore.createErrorStatus( ex );
}
}
return Status.OK_STATUS;
}
public IStatus execute( IProgressMonitor monitor, IAdaptable info ) throws ExecutionException
{
IStatus retval = null;
IStatus status = createServiceBuilderFile( getTargetProject(), monitor );
if( !status.isOK() )
{
return status;
}
return retval;
}
protected IProject getTargetProject()
{
String projectName = model.getStringProperty( PROJECT_NAME );
return ProjectUtil.getProject( projectName );
}
}