blob: 5f214e037459bc5243b7c90ee1d4163e62e685c3 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2009, 2010 SpringSource, a division of VMware, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.virgo.ide.runtime.internal.core;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.virgo.ide.facet.core.FacetUtils;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.model.PublishOperation;
import org.eclipse.wst.server.core.model.PublishTaskDelegate;
import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
/**
* {@link PublishOperation} extension that deals with deploy, clean and refresh of dm Server modules.
*
* @author Christian Dupuis
* @since 1.0.0
*/
public class ServerPublishTask extends PublishTaskDelegate {
@SuppressWarnings("unchecked")
@Override
public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList) {
if (modules == null || modules.size() == 0) {
return null;
}
Set<IModule> modulesToPublish = new HashSet<IModule>();
List<ServerPublishOperation> tasks = new ArrayList<ServerPublishOperation>();
ServerBehaviour engineServer = (ServerBehaviour) server.loadAdapter(ServerBehaviour.class, null);
for (int i = 0; i < modules.size(); i++) {
IModule[] module = (IModule[]) modules.get(i);
int state = server.getModulePublishState(module);
if (state != IServer.PUBLISH_STATE_NONE || kind == IServer.PUBLISH_CLEAN) {
Integer in = (Integer) kindList.get(i);
if (in != ServerBehaviourDelegate.NO_CHANGE || kind == IServer.PUBLISH_CLEAN) {
if (module.length == 1) {
addModuleToPublish(tasks, modulesToPublish, engineServer, module[0], in, kind);
} else if (FacetUtils.isParProject(module[0].getProject()) && kind != IServer.PUBLISH_CLEAN) {
addModuleToPublish(tasks, modulesToPublish, engineServer, module[0], in, kind);
} else if (module.length > 1) {
IProject project = module[0].getProject();
if (!FacetUtils.isBundleProject(project) && !FacetUtils.isParProject(project)) {
addModuleToPublish(tasks, modulesToPublish, engineServer, module[0], in, kind);
}
}
}
}
}
return tasks.toArray(new PublishOperation[tasks.size()]);
}
private void addModuleToPublish(List<ServerPublishOperation> tasks, Set<IModule> modulesToPublish, ServerBehaviour engineServer, IModule module,
Integer in, int kind) {
if (!modulesToPublish.contains(module)) {
tasks.add(new ServerPublishOperation(engineServer, kind, new IModule[] { module }, in.intValue()));
modulesToPublish.add(module);
}
}
}