/******************************************************************************* * Copyright © 2011, 2013 IBM Corporation 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: * IBM Corporation - initial API and implementation * *******************************************************************************/ package org.eclipse.edt.ide.deployment.rui.operation; import java.util.Iterator; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.edt.ide.core.utils.EclipseUtilities; import org.eclipse.edt.ide.deployment.core.IDeploymentConstants; import org.eclipse.edt.ide.deployment.core.model.DeploymentDesc; import org.eclipse.edt.ide.deployment.core.model.DeploymentTarget; import org.eclipse.edt.ide.deployment.operation.AbstractDeploymentOperation; import org.eclipse.edt.ide.deployment.results.IDeploymentResultsCollector; import org.eclipse.edt.ide.deployment.rui.internal.model.RUIDeploymentModel; import org.eclipse.edt.ide.deployment.rui.internal.nls.Messages; import org.eclipse.edt.ide.deployment.rui.internal.util.Utils; import org.eclipse.edt.ide.deployment.rui.tasks.J2EERUIDeploymentOperation; import org.eclipse.edt.ide.deployment.solution.DeploymentContext; import org.eclipse.edt.ide.deployment.utilities.DeploymentUtilities; import org.eclipse.edt.javart.resources.egldd.Parameter; import org.eclipse.wst.common.project.facet.core.IFacetedProject; import org.eclipse.wst.common.project.facet.core.IProjectFacet; import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; import org.eclipse.wst.jsdt.core.IIncludePathEntry; import org.eclipse.wst.jsdt.core.IJavaScriptProject; import org.eclipse.wst.jsdt.core.JavaScriptCore; public class GenerateHTMLFileOperation extends AbstractDeploymentOperation { private String targetProjectName; private DeploymentDesc model; private DeploymentContext context; @Override public void preCheck(DeploymentContext context, IDeploymentResultsCollector resultsCollector, IProgressMonitor monitor) throws CoreException { if ( context.getStatus() != DeploymentContext.STATUS_SHOULD_RUN ) { DeploymentDesc desc = context.getDeploymentDesc(); if ( desc.getRUIApplication() != null && desc.getRUIApplication().getRUIHandlers() != null && desc.getRUIApplication().getRUIHandlers().size() > 0 ) { context.setStatus( DeploymentContext.STATUS_SHOULD_RUN ); } } } public void execute(DeploymentContext context, IDeploymentResultsCollector resultsCollector, IProgressMonitor monitor) throws CoreException { this.context = context; model = context.getDeploymentDesc(); targetProjectName = DeploymentUtilities.getDeploymentTargetId(model.getDeploymentTarget(), null, model.getName()); IProject targetProject = ResourcesPlugin.getWorkspace().getRoot().getProject(targetProjectName); if( !EclipseUtilities.isWebProject(targetProject)) { resultsCollector.addMessage(DeploymentUtilities.createStatus(IStatus.ERROR, Messages.bind(Messages.J2EEDeploymentSolution_95, new String[] {targetProjectName}))); return; } if( !monitor.isCanceled() ){ removeJavaScriptValidation(targetProject, monitor); deployRUISolutions(monitor, resultsCollector); } } private void removeJavaScriptValidation(final IProject project, final IProgressMonitor monitor) { try { // check if the project has the JavaScript (wst.jsdt.web) facet installed IFacetedProject facetedProject = ProjectFacetsManager.create(project); IProjectFacet javaScriptFacet = ProjectFacetsManager.getProjectFacet("wst.jsdt.web"); //$NON-NLS-1$ if (facetedProject.hasProjectFacet(javaScriptFacet)) { // the JavaScript facet is already installed, clear the JavaScript include path to disable validation setJavaScriptIncludePath(project, monitor); } } catch ( CoreException ce) { } } private void setJavaScriptIncludePath(IProject project, IProgressMonitor monitor) { try { IJavaScriptProject javaScriptProject = JavaScriptCore.create(project); javaScriptProject.setRawIncludepath(new IIncludePathEntry[0], monitor); } catch (Exception e) { e.printStackTrace(); } } private void deployRUISolutions(IProgressMonitor monitor, final IDeploymentResultsCollector resultsCollector) { try{ DeploymentTarget target = model.getDeploymentTarget(); String contextRoot = ""; if( target != null ) { for (Iterator parameterIterator = target.getParameters().iterator(); parameterIterator.hasNext();) { Parameter parameter = (Parameter) parameterIterator.next(); if(IDeploymentConstants.PARAMETER_CONTEXT_ROOT.equals(parameter.getName())){ contextRoot = parameter.getValue(); } } } RUIDeploymentModel ruiModel = new RUIDeploymentModel(model.getRUIApplication(), context.getSourceProject(), targetProjectName, DeploymentUtilities.getAllEglddsName(context), contextRoot, resultsCollector); if(ruiModel.getHandlerLocales().size() > 0){ if(ruiModel.getSourceRUIHandlers().size() > 0){ J2EERUIDeploymentOperation deployOp = new J2EERUIDeploymentOperation(ruiModel); deployOp.execute(monitor, resultsCollector); }else{ // a RUI Model might have no handlers if none of them validated correctly. // We already issued error messages for the validation failures, so don't do anything else } }else{ resultsCollector.addMessage(DeploymentUtilities.createDeployMessage(IStatus.ERROR, Messages.J2EEDeploymentSolution_68)); } }catch(CoreException e) { resultsCollector.addMessage(e.getStatus()); }catch( Throwable t ) { t.printStackTrace(); resultsCollector.addMessage(DeploymentUtilities.createStatus(IStatus.ERROR, t.toString())); Utils.buildStackTraceMessages(resultsCollector, t); } } }