private void publishEBAModule()

in plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java [484:568]


    private void publishEBAModule(int kind, MultiStatus multi, IProgressMonitor monitor, ModuleDeltaList moduleList) {
        Trace.traceEntry(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishEBAModule", Arrays.toString(moduleList.getRootModule()));
        
        Map<IModule[], IStatus> statusMap = new HashMap<IModule[], IStatus>();
        
        if (getServerDelegate().isNoRedeploy() && !isRemote()) {            
            if (moduleList.hasChangedChildModulesOnly(true)) {    
                List<ModuleInfo> childModules = moduleList.getChildModules();
                for (ModuleInfo module : childModules) {
                    if (module.delta == CHANGED) {
                        // changed module - try to do replacement
                        IModuleResourceDelta[] delta = getPublishedResourceDelta(module.module);
                        IModuleResourceDelta[] nonClassDelta = FilteredClassResourceDelta.getChangedClassExcludeDelta(delta);
                        if (Activator.getDefault().isDebugging()) {
                            Trace.trace(Trace.INFO, "Non-modified class delta for " + module, Activator.traceCore);
                            traceModuleResourceDelta(nonClassDelta, "  ");
                        }
                        IStatus status = tryFileReplace(module.module, nonClassDelta);
                        if (status == null) {
                            // replace not performed - must redeploy bundle or entire application
                        } else if (status.isOK()) {
                            boolean containsModifiedClasses = DeploymentUtils.containsChangedClassResources(delta);
                            if (containsModifiedClasses) {
                                // replace performed but we have modified classes to deploy
                                // set remaining resource delta to process
                                IModuleResourceDelta[] classDelta = FilteredClassResourceDelta.getChangedClassIncludeDelta(delta);
                                if (Activator.getDefault().isDebugging()) {
                                    Trace.trace(Trace.INFO, "Modified class delta for " + module, Activator.traceCore);
                                    traceModuleResourceDelta(classDelta, "  ");
                                }
                                module.resourceDelta = classDelta;
                            } else {
                                // replace performed and was successful                    
                                statusMap.put(module.module, status);
                            }
                        } else {        
                            // replace performed but failed
                            statusMap.put(module.module, status);
                        }
                    } else {
                        // non-changed module
                        statusMap.put(module.module, Status.OK_STATUS);
                    }
                }
                
                if (statusMap.size() == childModules.size()) {
                    // replacement was possible for all changed child modules - we're done
                    for (Map.Entry<IModule[], IStatus> entry : statusMap.entrySet()) {
                        setStatus(entry.getKey(), entry.getValue(), multi);
                    }
                    setStatus(moduleList.getRootModule(), Status.OK_STATUS, multi);
                    Trace.traceExit(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishEBAModule", "File replace");
                    return;                        
                } 
                
                // fall-through: replacement was not possible for at least one child module or more work to do              
            }
        }
        
        boolean refreshOSGiBundle = getServerDelegate().isRefreshOSGiBundle();
        if (refreshOSGiBundle && moduleList.hasChangedChildModulesOnly(false)) {
            AbstractName ebaName = getApplicationGBeanName(moduleList.getRootModule()[0]);
            if (ebaName != null) {
                for (ModuleInfo module : moduleList.getChildModules()) {
                    IStatus status = statusMap.get(module.module);
                    if (status == null) {
                        if (module.delta == CHANGED) {
                            status = refreshBundle(ebaName, module);
                        } else {
                            status = Status.OK_STATUS;
                        }
                    }                           
                    setStatus(module.module, status, multi);
                }
                setStatus(moduleList.getRootModule(), Status.OK_STATUS, multi);
                Trace.traceExit(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishEBAModule", "Bundle update");
                return;
            }
        }
        
        // deploy the entire module
        publishEntireModule(kind, multi, monitor, moduleList);
        
        Trace.traceExit(Activator.traceCore, "GeronimoServerBehaviourDelegate.publishEBAModule");
    }