/*******************************************************************************
* 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.IWebProject;
import com.liferay.ide.core.LiferayCore;
import com.liferay.ide.core.util.StringPool;
import com.liferay.ide.sdk.core.ISDKConstants;
import com.liferay.ide.sdk.core.SDK;
import com.liferay.ide.server.core.ILiferayRuntime;
import com.liferay.ide.server.core.LiferayServerCore;
import com.liferay.ide.server.remote.AbstractRemoteServerPublisher;
import com.liferay.ide.server.util.ServerUtil;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.configuration.PropertiesConfiguration;
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.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
/**
* @author Simon Jiang
*/
public class SDKProjectRemoteServerPublisher extends AbstractRemoteServerPublisher
{
private SDK sdk;
public SDKProjectRemoteServerPublisher( IProject project, SDK sdk )
{
super( project );
this.sdk = sdk;
}
@Override
public IPath publishModuleFull( IProgressMonitor monitor ) throws CoreException
{
final IPath deployPath = LiferayServerCore.getTempLocation( "direct-deploy", StringPool.EMPTY ); //$NON-NLS-1$
File warFile = deployPath.append( getProject().getName() + ".war" ).toFile(); //$NON-NLS-1$
warFile.getParentFile().mkdirs();
final Map<String, String> properties = new HashMap<String, String>();
properties.put( ISDKConstants.PROPERTY_AUTO_DEPLOY_UNPACK_WAR, "false" ); //$NON-NLS-1$
final ILiferayRuntime runtime = ServerUtil.getLiferayRuntime( getProject() );
final String appServerDeployDirProp =
ServerUtil.getAppServerPropertyKey( ISDKConstants.PROPERTY_APP_SERVER_DEPLOY_DIR, runtime );
properties.put( appServerDeployDirProp, deployPath.toOSString() );
// IDE-1073 LPS-37923
properties.put( ISDKConstants.PROPERTY_PLUGIN_FILE_DEFAULT, warFile.getAbsolutePath() );
properties.put( ISDKConstants.PROPERTY_PLUGIN_FILE, warFile.getAbsolutePath() );
final String fileTimeStamp = System.currentTimeMillis() + "";
// IDE-1491
properties.put( ISDKConstants.PROPERTY_LP_VERSION, fileTimeStamp );
properties.put( ISDKConstants.PROPERTY_LP_VERSION_SUFFIX, ".0" );
IStatus status = sdk.validate();
if ( !status.isOK() )
{
throw new CoreException( status );
}
final IStatus directDeployStatus =
sdk.war(
getProject(), properties, true, new String[] { "-Duser.timezone=GMT" }, monitor );
if( !directDeployStatus.isOK() || ( !warFile.exists() ) )
{
String pluginVersion = "1";
final IPath pluginPropertiesPath = new Path( "WEB-INF/liferay-plugin-package.properties" );
final IWebProject webproject = LiferayCore.create( IWebProject.class, getProject() );
if( webproject != null )
{
final IResource propsRes = webproject.findDocrootResource( pluginPropertiesPath );
if( propsRes instanceof IFile && propsRes.exists() )
{
try
{
final PropertiesConfiguration pluginPackageProperties = new PropertiesConfiguration();
final InputStream is = ( (IFile) propsRes ).getContents();
pluginPackageProperties.load( is );
pluginVersion = pluginPackageProperties.getString( "module-incremental-version" );
is.close();
}
catch( Exception e )
{
LiferayCore.logError( "error reading module-incremtnal-version. ", e );
}
}
warFile =
sdk.getLocation().append( "dist" ).append(
getProject().getName() + "-" + fileTimeStamp + "." + pluginVersion + ".0" + ".war" ).toFile();
if( !warFile.exists() )
{
throw new CoreException( directDeployStatus );
}
}
}
return new Path( warFile.getAbsolutePath() );
}
}