/*******************************************************************************
* 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.core;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.project.core.facet.IPluginFacetConstants;
import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.sdk.core.SDK;
import com.liferay.ide.sdk.core.SDKManager;
import com.liferay.ide.sdk.core.SDKUtil;
import java.io.File;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.common.componentcore.datamodel.FacetProjectCreationDataModelProvider;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
import org.eclipse.wst.common.project.facet.core.IProjectFacet;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
import org.eclipse.wst.common.project.facet.core.runtime.internal.BridgedRuntime;
import org.osgi.framework.Version;
/**
* @author Greg Amerson
*/
@SuppressWarnings( { "unchecked", "restriction", "rawtypes" } )
public class LiferayProjectImportDataModelProvider extends FacetProjectCreationDataModelProvider
implements ILiferayProjectImportDataModelProperties
{
public LiferayProjectImportDataModelProvider()
{
super();
}
@Override
public IDataModelOperation getDefaultOperation()
{
return new LiferayProjectImportOperation( this.model );
}
@Override
public Object getDefaultProperty( String propertyName )
{
/*
* if (SDK_LOCATION.equals(propertyName)) { return ProjectCorePlugin.getDefault
* ().getPreferenceStore().getString(ProjectCorePlugin .LAST_SDK_IMPORT_LOCATION_PREF); } else
*/
if( SDK_VERSION.equals( propertyName ) )
{
// see if we have a sdk location and extract the version
String projectLoc = getStringProperty( PROJECT_LOCATION );
try
{
SDK sdk = SDKUtil.getSDKFromProjectDir( new File( projectLoc ) );
if( sdk != null )
{
return new Version( sdk.getVersion() ).toString();
}
}
catch( Exception e )
{
}
}
else if( PLUGIN_TYPE.equals( propertyName ) )
{
return ProjectUtil.getLiferayPluginType( getStringProperty( PROJECT_LOCATION ) );
}
return super.getDefaultProperty( propertyName );
}
@Override
public Set getPropertyNames()
{
Set propertyNames = super.getPropertyNames();
propertyNames.add( PROJECT_LOCATION );
propertyNames.add( PROJECT_RECORD );
propertyNames.add( SDK_VERSION );
propertyNames.add( PLUGIN_TYPE );
return propertyNames;
}
@Override
public void init()
{
super.init();
// set the project facets to get the runtime target dropdown to only
// show liferay runtimes
IFacetedProjectWorkingCopy facetedProject = getFacetedProjectWorkingCopy();
facetedProject.setSelectedPreset( IPluginFacetConstants.LIFERAY_PORTLET_PRESET );
Set<IProjectFacet> fixedFacets = new HashSet<IProjectFacet>();
fixedFacets.add( ProjectFacetsManager.getProjectFacet( IPluginFacetConstants.LIFERAY_EXT_FACET_ID ) );
facetedProject.setFixedProjectFacets( Collections.unmodifiableSet( fixedFacets ) );
// Set<IProjectFacetVersion> facets =
// ProjectUtil.getFacetsForPreset(IPluginFacetConstants.LIFERAY_PORTLET_PRESET);
// Set<IProjectFacet> fixedFacets = new HashSet<IProjectFacet>();
// for (IProjectFacetVersion pfv : facets) {
// fixedFacets.add(pfv.getProjectFacet());
// }
// facetedProject.setFixedProjectFacets(Collections.unmodifiableSet(fixedFacets));
ProjectUtil.setDefaultRuntime(getDataModel());
}
@Override
public boolean isPropertyEnabled( String propertyName )
{
if( SDK_VERSION.equals( propertyName ) || PLUGIN_TYPE.equals( propertyName ) )
{
return false;
}
return super.isPropertyEnabled( propertyName );
}
@Override
public boolean propertySet( String propertyName, Object propertyValue )
{
return super.propertySet( propertyName, propertyValue );
}
@Override
public IStatus validate( String name )
{
if( PROJECT_LOCATION.equals( name ) )
{
String projectLocation = getStringProperty( PROJECT_LOCATION );
ProjectRecord record = ProjectUtil.getProjectRecordForDir( projectLocation );
if( record != null )
{
String projectName = record.getProjectName();
IProject existingProject = ResourcesPlugin.getWorkspace().getRoot().getProject( projectName );
if( existingProject != null && existingProject.exists() )
{
return ProjectCore.createErrorStatus( Msgs.projectNameExists );
}
File projectDir = record.getProjectLocation().toFile();
// go up to the SDK level
SDK sdk = SDKUtil.getSDKFromProjectDir( projectDir );
if( sdk != null )
{
return Status.OK_STATUS;
}
else
{
return ProjectCore.createErrorStatus( Msgs.projectNotLocated );
}
}
return ProjectCore.createErrorStatus( Msgs.invalidProjectLocation );
}
else if( SDK_VERSION.equals( name ) )
{
IStatus locationStatus = validate( PROJECT_LOCATION );
if( locationStatus.isOK() )
{
Version version = new Version( getStringProperty( SDK_VERSION ) );
if( CoreUtil.compareVersions( version, SDKManager.getLeastValidVersion() ) >= 0 )
{
return Status.OK_STATUS;
}
else
{
return ProjectCore.createErrorStatus( Msgs.invalidPluginSDKVersion +
SDKManager.getLeastValidVersion() );
}
}
else
{
return locationStatus;
}
}
else if( PLUGIN_TYPE.equals( name ) )
{
if( ProjectUtil.isLiferayPluginType( getStringProperty( PLUGIN_TYPE ) ) )
{
return Status.OK_STATUS;
}
else
{
return ProjectCore.createErrorStatus( Msgs.invalidLiferayPluginType );
}
}
else if( FACET_RUNTIME.equals( name ) )
{
Object runtime = getProperty( FACET_RUNTIME );
if( !( runtime instanceof BridgedRuntime ) )
{
return ProjectCore.createErrorStatus( Msgs.validLiferayRuntimeSelected );
}
else
{
return Status.OK_STATUS;
}
}
else if( FACET_PROJECT_NAME.equals( name ) )
{// no need to check this one
return Status.OK_STATUS;
}
return super.validate( name );
}
protected IFacetedProjectWorkingCopy getFacetedProjectWorkingCopy()
{
return (IFacetedProjectWorkingCopy) this.model.getProperty( FACETED_PROJECT_WORKING_COPY );
}
private static class Msgs extends NLS
{
public static String invalidLiferayPluginType;
public static String invalidPluginSDKVersion;
public static String invalidProjectLocation;
public static String projectNameExists;
public static String projectNotLocated;
public static String validLiferayRuntimeSelected;
static
{
initializeMessages( LiferayProjectImportDataModelProvider.class.getName(), Msgs.class );
}
}
}