in plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java [389:482]
protected void publishModules(int kind, List modules, List deltaKind, MultiStatus multi, IProgressMonitor monitor) {
Trace.traceEntry(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishModules", publishKindToString(kind), Arrays.asList(modules), Arrays.asList(deltaKind), multi, monitor);
//
// WTP publishes modules in reverse alphabetical order which does not account for possible
// dependencies between modules. If necessary reorder the publish order of the modules
// based on any discovered dependencies.
//
if (modules != null && modules.size() > 0) {
List list = getOrderedModules(this.getServer(),modules, deltaKind);
modules = (List) list.get(0);
deltaKind = (List) list.get(1);
// trace output
if (Activator.getDefault().isDebugging()) {
for (int i = 0; i < modules.size(); i++) {
IModule[] module = (IModule[]) modules.get(i);
Trace.trace(Trace.INFO, i + " " + Arrays.asList(module).toString() + " "
+ deltaKindToString(((Integer) deltaKind.get(i)).intValue()), Activator.traceCore);
IModuleResourceDelta[] deltas = getPublishedResourceDelta(module);
traceModuleResourceDelta(deltas, " ");
}
}
}
IStatus status = Status.OK_STATUS;
if (modules != null && modules.size() > 0 && getGeronimoServer().isInPlaceSharedLib()) {
List<IModule> rootModules = new ArrayList<IModule>();
for(int i = 0; i < modules.size(); i++) {
IModule[] module = (IModule[]) modules.get(i);
if(!rootModules.contains(module[0])) {
rootModules.add(module[0]);
}
}
IModule[] toProcess = (IModule[])rootModules.toArray(new IModule[rootModules.size()]);
status = updateSharedLib(toProcess, ProgressUtil.getSubMonitorFor(monitor, 1000));
}
/*
* Build a map of root modules that need to be published. This is to ensure that
* we avoid redeploys and it guarantees that publishModule() is called once per
* deployed application.
*/
Map<String, ModuleDeltaList> publishMap = new LinkedHashMap<String, ModuleDeltaList>();
for (int i = 0; i < modules.size(); i++) {
IModule[] module = (IModule[]) modules.get(i);
Integer moduleDeltaKind = (Integer) deltaKind.get(i);
IModule rootModule = module[0];
ModuleDeltaList list = publishMap.get(rootModule.getId());
if (list == null) {
list = new ModuleDeltaList(rootModule);
publishMap.put(rootModule.getId(), list);
}
if (module.length == 1) {
list.setRootModuleDelta(moduleDeltaKind.intValue());
} else {
list.addChildModule(module, moduleDeltaKind.intValue());
}
}
// Reset source code lookup list - see GERONIMODEVTOOLS-763 for details.
if (ILaunchManager.DEBUG_MODE.equals(getServer().getMode()) && !hasKnownSourceProject(modules)) {
resetSourceLookupList();
}
if (status.isOK()) {
if (modules == null || modules.isEmpty()) {
return;
}
if (monitor.isCanceled()) {
return;
}
for (ModuleDeltaList moduleList : publishMap.values()) {
IModule[] rootModule = moduleList.getRootModule();
if (GeronimoUtils.isEBAModule(rootModule[0])) {
publishEBAModule(kind, multi, monitor, moduleList);
} else if (GeronimoUtils.isEarModule(rootModule[0])) {
publishEARModule(kind, multi, monitor, moduleList);
} else if (GeronimoUtils.isWebModule(rootModule[0]) || GeronimoUtils.isBundleModule(rootModule[0])) {
publishSingleModule(kind, multi, monitor, moduleList);
} else {
publishEntireModule(kind, multi, monitor, moduleList);
}
}
} else {
multi.add(status);
}
Trace.traceExit(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishModules");
}