protected void publishModules()

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");
    }