/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.seam.internal.core.project.facet;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
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.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IRuntimeType;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.IServerWorkingCopy;
import org.eclipse.wst.server.core.ServerUtil;
import org.eclipse.wst.server.core.internal.ChainedJob;
import org.jboss.ide.eclipse.as.core.modules.SingleDeployableFactory;
import org.jboss.tools.seam.core.SeamCoreMessages;
import org.jboss.tools.seam.core.SeamCorePlugin;
/**
* This class is provided to deploy data source descriptor or any other resource to JBoss AS for Seam
* Web Project in WAR and EAR deployment configurations.
*
* @author eskimo
*
*/
public class ResourceDeployer extends ChainedJob {
IProject project = null;
IServer s = null;
IPath deploy = null;
public ResourceDeployer(IProject project, IServer s, IPath deploy) {
super(SeamCoreMessages.DATA_SOURCE_XML_DEPLOYER_DEPLOYING_DATASOURCE_TO_SERVER, s);
this.project = project;
// is must be user since ds.xml (or other resource which is being deployed) has the same behaviour for EAR
// deployment. It should run after ear project created and imported into
// workspace
setUser(true);
setRule(ResourcesPlugin.getWorkspace().getRoot());
this.s = s;
this.deploy = deploy;
}
@Override
protected IStatus run(IProgressMonitor monitor) {
if (s == null) {
return new Status(Status.WARNING, SeamCorePlugin.PLUGIN_ID,
SeamCoreMessages.DATA_SOURCE_XML_DEPLOYER_NO_SERVER_SELECTED_TO_DEPLOY_DATASOURCE_TO);
}
IRuntimeType rt = s.getServerType().getRuntimeType();
if (!ServerUtil.isSupportedModule(rt.getModuleTypes(),
SingleDeployableFactory.MODULE_TYPE, SingleDeployableFactory.VERSION)) {
return new Status(Status.WARNING, SeamCorePlugin.PLUGIN_ID,
SeamCoreMessages.DATA_SOURCE_XML_DEPLOYER_SERVER_DID_NOT_SUPPORT_DEPLOY_OF_DATASOURCE);
}
IPath projectPath = new Path("/" //$NON-NLS-1$
+ project.getName());
IPath append = projectPath.append(deploy); //$NON-NLS-1$
if (SingleDeployableFactory.makeDeployable(append)) {
try {
IModule module = SingleDeployableFactory.findModule(append);
IServerWorkingCopy copy = s.createWorkingCopy();
copy.modifyModules(new IModule[]{module}, new IModule[0], new NullProgressMonitor());
IServer saved = copy.save(false, new NullProgressMonitor());
saved.publish(IServer.PUBLISH_INCREMENTAL, new NullProgressMonitor());
} catch( CoreException ce ) {
return new Status(Status.WARNING, SeamCorePlugin.PLUGIN_ID,
SeamCoreMessages.DATA_SOURCE_XML_DEPLOYER_COULD_NOT_DEPLOY_DATASOURCE + append, ce);
}
return Status.OK_STATUS;
} else {
return new Status(Status.WARNING, SeamCorePlugin.PLUGIN_ID,
SeamCoreMessages.DATA_SOURCE_XML_DEPLOYER_COULD_NOT_DEPLOY_DATASOURCE + append); //$NON-NLS-1$
}
}
}