blob: f8d661879869b2b35b3e89d9eb1b38ff87d2dee1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 WSO2 Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* WSO2 Inc. - initial API and implementation
* yyyymmdd bug Email and other contact information
* -------- -------- -----------------------------------------------------------
* 20070213 168766 sandakith@wso2.com - Lahiru Sandakith, Initial code to introduse the Axis2
* facet to the framework for 168766
* 20070426 183046 sandakith@wso2.com - Lahiru Sandakith
* 20070501 180284 sandakith@wso2.com - Lahiru Sandakith
* 20070523 174876 sandakith@wso2.com - Lahiru Sandakith, Persist Preferences inside Framework
* 20070606 177421 sandakith@wso2.com - fix web.xml wiped out when Axis2 facet
* 20070808 194906 sandakith@wso2.com - Lahiru Sandakith, Fixing 194906 Runtime lib issue
* 20070824 200515 sandakith@wso2.com - Lahiru Sandakith, NON-NLS move to seperate file
* 20071011 205972 sandakith@wso2.com - Lahiru Sandakith, Axis2 Libraries License files fix
* 20080528 186429 sandakith@wso2.com - Lahiru Sandakith, Axis2 webapp jsp's validation fix
* 20080616 237363 samindaw@wso2.com - Saminda Wijeratne, get ResourceContext from environment instead of preference
* 20100308 282466 samindaw@wso2.com - Saminda Wijeratne, support for axis2 1.5
*******************************************************************************/
package org.eclipse.jst.ws.axis2.facet.commands;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
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.jst.ws.axis2.core.constant.Axis2Constants;
import org.eclipse.jst.ws.axis2.core.context.Axis2EmitterContext;
import org.eclipse.jst.ws.axis2.core.plugin.WebServiceAxis2CorePlugin;
import org.eclipse.jst.ws.axis2.core.plugin.messages.Axis2CoreUIMessages;
import org.eclipse.jst.ws.axis2.core.utils.Axis2CoreUtils;
import org.eclipse.jst.ws.axis2.core.utils.FacetContainerUtils;
import org.eclipse.jst.ws.axis2.core.utils.FileUtils;
import org.eclipse.jst.ws.axis2.core.utils.RuntimePropertyUtils;
import org.eclipse.jst.ws.axis2.facet.utils.Axis2RuntimeUtils;
import org.eclipse.jst.ws.axis2.facet.utils.Axis2WebappUtils;
import org.eclipse.jst.ws.axis2.facet.utils.ContentCopyUtils;
import org.eclipse.jst.ws.internal.common.J2EEUtils;
import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
import org.eclipse.wst.validation.ValidationFramework;
public class Axis2WebservicesServerCommand extends
AbstractDataModelOperation {
IProject project;
Axis2EmitterContext context;
public Axis2WebservicesServerCommand(IProject project){
context = WebServiceAxis2CorePlugin.getDefault().getAxisEmitterContext();
this.project = project;
}
public IStatus execute(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
return Status.OK_STATUS;
}
public IStatus executeOverride(IProgressMonitor monitor) {
//Copy the axis2 facet in to this project
IStatus status =null;
String runtimeLocation = null;
ContentCopyUtils contentCopyUtils = new ContentCopyUtils(getEnvironment());
try {
if(context.isAxis2ServerPathRepresentsWar()
|| RuntimePropertyUtils.getWarStatusFromPropertiesFile()){
runtimeLocation = Axis2RuntimeUtils.copyAxis2War(
monitor,
Axis2Constants.PROPERTY_KEY_PATH);
}else{
runtimeLocation = Axis2WebappUtils.copyAxis2War(
monitor,
Axis2Constants.PROPERTY_KEY_PATH);
}
} catch (FileNotFoundException e) {
return handleExceptionStatus(e);
} catch (IOException e) {
return handleExceptionStatus(e);
} catch (Exception e) {
return handleExceptionStatus(e);
}
//First Setting the libs folder as ignored and then copy the content of the runtime
IPath libPath = new Path(runtimeLocation);
libPath = libPath.append(Axis2Constants.DIR_WEB_INF);
libPath = libPath.append(Axis2Constants.DIR_LIB);
List<String> ignoreList = new ArrayList<String>();
ignoreList.add(libPath.toOSString());
contentCopyUtils.updateCheckList(ignoreList);
//Related issue 186429, Solution is to disable the validation of the Axis2 JSP container location.
ValidationFramework validationFrameworkInstance = ValidationFramework.getDefault();
String[] node = {Axis2Constants.DIR_AXIS2_WEB};
IPath pathForAxis2JSPContainer = new Path(
FileUtils.addNodesToPath(J2EEUtils.getWebContentPath(project).toOSString(), node));
validationFrameworkInstance.disableValidation(
project.getWorkspace().getRoot().getFolder(pathForAxis2JSPContainer));
status = contentCopyUtils.copyDirectoryRecursivelyIntoWorkspace(
runtimeLocation,
FacetContainerUtils.pathToWebProjectContainer(project.toString()),
monitor,
false
);
// After that copy the nesessery set of libraries to the project again
List<String> includeList = new ArrayList<String>();
contentCopyUtils.updateCheckList(loadIncludeListWithAxis2Libs(libPath.toOSString(),
includeList));
status = contentCopyUtils.copyDirectoryRecursivelyIntoWorkspace(
libPath.toOSString(), FacetContainerUtils.getAxis2WebContainerLibPath(project),
monitor,
true
);
//Merge web.xml Files
MergeWEBXMLCommand mergeWebXMLCommand = new MergeWEBXMLCommand();
mergeWebXMLCommand.setExtraAxis2TagsAdded(false);
mergeWebXMLCommand.setServerProject(project);
mergeWebXMLCommand.exexuteOverride(monitor);
//clean up tempery files
File tempFacetDirectory = new File(runtimeLocation);
if (tempFacetDirectory.exists() && context.isAxis2ServerPathRepresentsWar()) {
FileUtils.deleteDir(tempFacetDirectory);
}
status = Status.OK_STATUS;
return status;
}
private void cleanupIfFacetStatusFailed(String runtimeLocation){
File tempFacetDirectory = new File(runtimeLocation);
if (tempFacetDirectory.exists()) {
FileUtils.deleteDir(tempFacetDirectory);
}
}
private IStatus handleExceptionStatus(Exception e){
IStatus status = null;
status = new Status(1,project.toString(),1,Axis2CoreUIMessages.ERROR_SERVER_IS_NOT_SET,e);
cleanupIfFacetStatusFailed(Axis2CoreUtils.tempAxis2Directory());
return status;
}
/**
* Load the exact libraries list from the axis2 jars with the correct versions to the
* <code>path</code>. Doing it this way introduce the scalability to the solution
* where the need comes in the future releases to include additional libraries and
* if needed filter out some libraries.
* @param runtimeLocation
* @param includeList
* @return loaded list
*/
private List loadIncludeListWithAxis2Libs(String path, List includeList){
for (int i = 0; i < Axis2Constants.AXIS2_LIB_PREFIXES.length; i++) {
File[] jarFileList = FileUtils.getMatchingFiles(path,
Axis2Constants.AXIS2_LIB_PREFIXES[i],
Axis2Constants.JAR);
for (int j = 0; j < jarFileList.length; j++) {
includeList.add(jarFileList[j].getAbsolutePath());
}
//Fix for the 205972
File[] licenseFileList = FileUtils.getMatchingFiles(path,
Axis2Constants.AXIS2_LIB_PREFIXES[i],
Axis2Constants.TXT);
for (int k = 0; k < licenseFileList.length; k++) {
includeList.add(licenseFileList[k].getAbsolutePath());
}
}
return includeList;
}
}