plugins/org.apache.geronimo.st.v22.core/src/main/java/org/apache/geronimo/st/v22/core/operations/GeronimoServerV22PluginManager.java [589:777]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        try {
            ConfigurationManager configManager = getConfigurationManager();
            Map<Artifact, PluginType> metaMap = new HashMap<Artifact, PluginType>();
            // Step 1: validate everything
            List<PluginType> toInstall = new ArrayList<PluginType>();
            for (PluginType metadata : pluginList) {
                try {
                    validatePlugin(metadata);
                    verifyPrerequisites(metadata);

                    PluginArtifactType instance = metadata.getPluginArtifact().get(0);

                    if (instance.getModuleId() != null) {
                        metaMap.put(toArtifact(instance.getModuleId()), metadata);
                    }
                    toInstall.add(metadata);
                } catch (Exception e) {
                }
            }

            // Step 2: everything is valid, do the installation
            for (PluginType metadata : toInstall) {
                // 2. Unload obsoleted configurations
                if (!validatePlugin(metadata)) {
                    // metadata exists
                    PluginArtifactType instance = metadata.getPluginArtifact()
                            .get(0);
                    List<Artifact> obsoletes = new ArrayList<Artifact>();
                    for (ArtifactType obs : instance.getObsoletes()) {
                        Artifact obsolete = toArtifact(obs);
                        if (configManager.isLoaded(obsolete)) {
                            if (configManager.isRunning(obsolete)) {
                                configManager.stopConfiguration(obsolete);
                                eventLog.add(obsolete.toString() + " stopped");
                            }
                            configManager.unloadConfiguration(obsolete);
                            obsoletes.add(obsolete);
                        }
                    }

                    // 4. Uninstall obsolete configurations
                    for (Artifact artifact : obsoletes) {
                        configManager.uninstallConfiguration(artifact);
                    }
                }
            }
            
            // Step 3: Start anything that's marked accordingly
            if (configManager.isOnline()) {
                for (int i = 0; i < toInstall.size(); i++) {
                    Artifact artifact = toArtifact(toInstall.get(i).getPluginArtifact().get(0).getModuleId());
                    if (!configManager.isRunning(artifact)) {
                        if (!configManager.isLoaded(artifact)) {
                            File serverArtifact = new File(getArtifactLocation (artifact));
                            File localDir = new File (createDirectoryStructure(localRepoDir, artifact));
                            writeToRepository(localDir, serverArtifact);
                            configManager.loadConfiguration(artifact);
                        }
                        configManager.startConfiguration(artifact);
                        eventLog.add(artifact.toString() + " started");
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.installPlugins", eventLog.toString());
        return eventLog;
    }

    // mimics org.apache.geronimo.system.plugin.PluginInstallerGbean.verifyPrerequisistes
    private void verifyPrerequisites(PluginType plugin) throws Exception {
        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.verifyPrerequisites", plugin);
        List<Dependency> missingPrereqs = getMissingPrerequisites(plugin);
        if (!missingPrereqs.isEmpty()) {
            PluginArtifactType metadata = plugin.getPluginArtifact().get(0);
            Artifact moduleId = toArtifact(metadata.getModuleId());
            StringBuffer buf = new StringBuffer();
            buf.append(moduleId.toString()).append(CommonMessages.requires);
            Iterator<Dependency> iter = missingPrereqs.iterator();
            while (iter.hasNext()) {
                buf.append(iter.next().getArtifact().toString());
                if (iter.hasNext()) {
                    buf.append(", ");
                }
            }
            buf.append(CommonMessages.installed);
            Trace.tracePoint("Throw", Activator.traceOperations, "GeronimoServerPluginManager.verifyPrerequisites", buf.toString());
            throw new Exception(buf.toString());
        }

        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.verifyPrerequisites");
    }

    // mimics org.apache.geronimo.system.plugin.PluginInstallerGbean.getMissingPrerequisistes
    private List<Dependency> getMissingPrerequisites(PluginType plugin) {
        Trace.tracePoint("Entry", Activator.traceOperations, "GeronimoServerPluginManager.getMissingPrerequisites", plugin);

        if (plugin.getPluginArtifact().size() != 1) {
            String message = CommonMessages.bind(CommonMessages.configSizeMismatch, plugin.getPluginArtifact().size());
            Trace.tracePoint("Throw", Activator.traceOperations, "GeronimoServerPluginManager.getMissingPrerequisites", message);
            throw new IllegalArgumentException(message);
        }

        PluginArtifactType metadata = plugin.getPluginArtifact().get(0);
        List<PrerequisiteType> prereqs = metadata.getPrerequisite();

        ArrayList<Dependency> missingPrereqs = new ArrayList<Dependency>();
        for (PrerequisiteType prereq : prereqs) {
            Artifact artifact = toArtifact(prereq.getId());
            try {
                if (getConfigurationManager().getArtifactResolver().queryArtifacts(artifact).length == 0) {
                    missingPrereqs.add(new Dependency(artifact, ImportType.ALL));
                }
            } catch (Exception e) {
                Trace.tracePoint("Throw", Activator.traceOperations, "GeronimoServerPluginManager.getMissingPrerequisites", CommonMessages.noDefaultServer);
                throw new RuntimeException(CommonMessages.noDefaultServer);
            }
        }

        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.getMissingPrerequisites", missingPrereqs);
        return missingPrereqs;
    }
    
    //Extract the car file
    private void writeToRepository(File inputDir, File outputDir) throws Exception {
        Trace.tracePoint("Entry", Activator.traceOperations, "GeronimoServerPluginManager.writeToRepository", inputDir,outputDir);

        outputDir.mkdirs();
        File[] all = inputDir.listFiles();
        for (File file : all) {
            if (file.isDirectory()) {
                String oDir = outputDir.getAbsolutePath() + File.separator + file.getName();
                File temp = new File (oDir);
                writeToRepository(file, temp);
            }else if(file.getName().toLowerCase().endsWith(".car"))
            {
               String oDir = outputDir.getAbsolutePath() + File.separator + file.getName();
                File temp = new File (oDir);
                
                ZipInputStream in=new ZipInputStream(new FileInputStream(file));            
                try {
                    byte[] buffer = new byte[10240];
                    for (ZipEntry entry = in.getNextEntry(); entry != null; entry = in.getNextEntry()) {
                        File zipFile = new File(temp, entry.getName());
                        if (entry.isDirectory()) {
                           zipFile.mkdirs();
                        } else {
                            if (!entry.getName().equals("META-INF/startup-jar")) {
                               zipFile.getParentFile().mkdirs();
                                OutputStream out = new FileOutputStream(zipFile);
                                try {
                                    int count;
                                    while ((count = in.read(buffer)) > 0) {
                                        out.write(buffer, 0, count);                                    
                                    }
                                } finally {                                 
                                    out.close();
                                }
                                in.closeEntry();
                            }
                        }
                    }
                } catch (IOException e) {               
                    throw e;
                } finally {
                    in.close();          
                }
            }
            else {
                File entry = new File(outputDir + File.separator + file.getName());
                FileOutputStream out = new FileOutputStream (entry);
                FileInputStream in = new FileInputStream(file);
                byte[] buf = new byte[10240];
                int count;
                try {
                    while ((count = in.read(buf, 0, buf.length)) > -1) {
                        out.write(buf, 0, count);
                    }
                } finally {
                    in.close();
                    out.flush();
                    out.close();
                }
            }
        }
        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.writeToRepository");
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/operations/GeronimoServerPluginManager.java [573:761]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        try {
            ConfigurationManager configManager = getConfigurationManager();
            Map<Artifact, PluginType> metaMap = new HashMap<Artifact, PluginType>();
            // Step 1: validate everything
            List<PluginType> toInstall = new ArrayList<PluginType>();
            for (PluginType metadata : pluginList) {
                try {
                    validatePlugin(metadata);
                    verifyPrerequisites(metadata);

                    PluginArtifactType instance = metadata.getPluginArtifact().get(0);

                    if (instance.getModuleId() != null) {
                        metaMap.put(toArtifact(instance.getModuleId()), metadata);
                    }
                    toInstall.add(metadata);
                } catch (Exception e) {
                }
            }

            // Step 2: everything is valid, do the installation
            for (PluginType metadata : toInstall) {
                // 2. Unload obsoleted configurations
                if (!validatePlugin(metadata)) {
                    // metadata exists
                    PluginArtifactType instance = metadata.getPluginArtifact()
                            .get(0);
                    List<Artifact> obsoletes = new ArrayList<Artifact>();
                    for (ArtifactType obs : instance.getObsoletes()) {
                        Artifact obsolete = toArtifact(obs);
                        if (configManager.isLoaded(obsolete)) {
                            if (configManager.isRunning(obsolete)) {
                                configManager.stopConfiguration(obsolete);
                                eventLog.add(obsolete.toString() + " stopped");
                            }
                            configManager.unloadConfiguration(obsolete);
                            obsoletes.add(obsolete);
                        }
                    }

                    // 4. Uninstall obsolete configurations
                    for (Artifact artifact : obsoletes) {
                        configManager.uninstallConfiguration(artifact);
                    }
                }
            }
            
            // Step 3: Start anything that's marked accordingly
            if (configManager.isOnline()) {
                for (int i = 0; i < toInstall.size(); i++) {
                    Artifact artifact = toArtifact(toInstall.get(i).getPluginArtifact().get(0).getModuleId());
                    if (!configManager.isRunning(artifact)) {
                        if (!configManager.isLoaded(artifact)) {
                            File serverArtifact = new File(getArtifactLocation (artifact));
                            File localDir = new File (createDirectoryStructure(localRepoDir, artifact));
                            writeToRepository(localDir, serverArtifact);
                            configManager.loadConfiguration(artifact);
                        }
                        configManager.startConfiguration(artifact);
                        eventLog.add(artifact.toString() + " started");
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.installPlugins", eventLog.toString());
        return eventLog;
    }

    // mimics org.apache.geronimo.system.plugin.PluginInstallerGbean.verifyPrerequisistes
    private void verifyPrerequisites(PluginType plugin) throws Exception {
        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.verifyPrerequisites", plugin);
        List<Dependency> missingPrereqs = getMissingPrerequisites(plugin);
        if (!missingPrereqs.isEmpty()) {
            PluginArtifactType metadata = plugin.getPluginArtifact().get(0);
            Artifact moduleId = toArtifact(metadata.getModuleId());
            StringBuffer buf = new StringBuffer();
            buf.append(moduleId.toString()).append(CommonMessages.requires);
            Iterator<Dependency> iter = missingPrereqs.iterator();
            while (iter.hasNext()) {
                buf.append(iter.next().getArtifact().toString());
                if (iter.hasNext()) {
                    buf.append(", ");
                }
            }
            buf.append(CommonMessages.installed);
            Trace.tracePoint("Throw", Activator.traceOperations, "GeronimoServerPluginManager.verifyPrerequisites", buf.toString());
            throw new Exception(buf.toString());
        }

        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.verifyPrerequisites");
    }

    // mimics org.apache.geronimo.system.plugin.PluginInstallerGbean.getMissingPrerequisistes
    private List<Dependency> getMissingPrerequisites(PluginType plugin) {
        Trace.tracePoint("Entry", Activator.traceOperations, "GeronimoServerPluginManager.getMissingPrerequisites", plugin);

        if (plugin.getPluginArtifact().size() != 1) {
            String message = CommonMessages.bind(CommonMessages.configSizeMismatch, plugin.getPluginArtifact().size());
            Trace.tracePoint("Throw", Activator.traceOperations, "GeronimoServerPluginManager.getMissingPrerequisites", message);
            throw new IllegalArgumentException(message);
        }

        PluginArtifactType metadata = plugin.getPluginArtifact().get(0);
        List<PrerequisiteType> prereqs = metadata.getPrerequisite();

        ArrayList<Dependency> missingPrereqs = new ArrayList<Dependency>();
        for (PrerequisiteType prereq : prereqs) {
            Artifact artifact = toArtifact(prereq.getId());
            try {
                if (getConfigurationManager().getArtifactResolver().queryArtifacts(artifact).length == 0) {
                    missingPrereqs.add(new Dependency(artifact, ImportType.ALL));
                }
            } catch (Exception e) {
                Trace.tracePoint("Throw", Activator.traceOperations, "GeronimoServerPluginManager.getMissingPrerequisites", CommonMessages.noDefaultServer);
                throw new RuntimeException(CommonMessages.noDefaultServer);
            }
        }

        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.getMissingPrerequisites", missingPrereqs);
        return missingPrereqs;
    }
    
    //Extract the car file
    private void writeToRepository(File inputDir, File outputDir) throws Exception {
        Trace.tracePoint("Entry", Activator.traceOperations, "GeronimoServerPluginManager.writeToRepository", inputDir,outputDir);

        outputDir.mkdirs();
        File[] all = inputDir.listFiles();
        for (File file : all) {
            if (file.isDirectory()) {
                String oDir = outputDir.getAbsolutePath() + File.separator + file.getName();
                File temp = new File (oDir);
                writeToRepository(file, temp);
            }else if(file.getName().toLowerCase().endsWith(".car"))
            {
               String oDir = outputDir.getAbsolutePath() + File.separator + file.getName();
                File temp = new File (oDir);
                
                ZipInputStream in=new ZipInputStream(new FileInputStream(file));            
                try {
                    byte[] buffer = new byte[10240];
                    for (ZipEntry entry = in.getNextEntry(); entry != null; entry = in.getNextEntry()) {
                        File zipFile = new File(temp, entry.getName());
                        if (entry.isDirectory()) {
                           zipFile.mkdirs();
                        } else {
                            if (!entry.getName().equals("META-INF/startup-jar")) {
                               zipFile.getParentFile().mkdirs();
                                OutputStream out = new FileOutputStream(zipFile);
                                try {
                                    int count;
                                    while ((count = in.read(buffer)) > 0) {
                                        out.write(buffer, 0, count);                                    
                                    }
                                } finally {                                 
                                    out.close();
                                }
                                in.closeEntry();
                            }
                        }
                    }
                } catch (IOException e) {               
                    throw e;
                } finally {
                    in.close();          
                }
            }
            else {
                File entry = new File(outputDir + File.separator + file.getName());
                FileOutputStream out = new FileOutputStream (entry);
                FileInputStream in = new FileInputStream(file);
                byte[] buf = new byte[10240];
                int count;
                try {
                    while ((count = in.read(buf, 0, buf.length)) > -1) {
                        out.write(buf, 0, count);
                    }
                } finally {
                    in.close();
                    out.flush();
                    out.close();
                }
            }
        }
        Trace.tracePoint("Exit", Activator.traceOperations, "GeronimoServerPluginManager.writeToRepository");
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



