public InputStream getDeploymentPlan()

in src/main/java/org/apache/openejb/cts/DeploymentImpl.java [133:203]


    public InputStream getDeploymentPlan(final DeploymentInfo info) throws TSDeploymentException {
        classpathBuilder = new StringBuilder();
        final String earPath = info.getEarFile();
        final String earDir = earPath.substring(0, earPath.lastIndexOf('.'));
        try {
            JarFile jarFile = new JarFile(earPath);
            Enumeration<JarEntry> entries = jarFile.entries();
            while (entries.hasMoreElements()) {
                JarEntry jarEntry = entries.nextElement();
                if (jarEntry.getName().startsWith("lib") && jarEntry.getName().endsWith(".jar")) {
                    if (classpathBuilder.toString().isEmpty()) {
                        classpathBuilder.append(String.format("%s%s", earDir, File.separator + jarEntry.getName()));
                        continue;
                    }

                    if (!classpathBuilder.toString().contains(jarEntry.getName())) {
                        classpathBuilder.append(String.format("%s%s%s", PATH_SEP, earDir, jarEntry.getName()));
                    }
                }
            }
        } catch (IOException e) {
            // do nop
        }
        if (earPath == null) {
            throw new TSDeploymentException("EarFile is null");
        }
        log.println(HEAD + "module: " + earPath);

        final Properties properties = new Properties();
        properties.put(FILENAME, earPath);

        final Set<String> moduleIds = new TreeSet<String>();
        moduleIds.addAll(info.getWebRuntimeData().keySet());
        moduleIds.addAll(info.getEjbRuntimeData().keySet());
        moduleIds.addAll(info.getAppRuntimeData().keySet());
        moduleIds.addAll(info.getAppClientRuntimeData().keySet());

        for (final String path : info.getRuntimeFiles()) {
            final String earName = earName(path, earPath);
            if (earName != null && path.contains(earName)) {
                final String name = path.substring(path.indexOf(earName) + earName.length() + 1);
                properties.put(ALT_DD + "/" + name, path);
            } else {
                final String fileName = new File(path).getName();
                for (final String moduleId : moduleIds) {
                    if (fileName.startsWith(moduleId)) {
                        final String name = fileName.substring(moduleId.length() + 1);
                        properties.put(ALT_DD + "/" + moduleId + "/" + name, path);

                        // hack when deployer is used to deploy war in a standalone manner and not within an ear file
                        // in that case, the altDD above are not read and webapp context is not overridden by the sun web.xml
                        final Object webAppObject = info.getWebRuntimeData().get(moduleId);
                        if (webAppObject != null) {
                            final SunWebApp sunWebApp = SunWebApp.class.cast(webAppObject);
                            if (sunWebApp.getContextRoot() != null) {
                                properties.put("webapp." + moduleId + ".context-root", sunWebApp.getContextRoot());
                            }
                        }
                    }
                }
            }
        }

        final ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            properties.store(out, "Auto Generated Deployment Plan");
        } catch (final IOException e) {
            throw new TSDeploymentException("Unable to create deployment plan", e);
        }
        return new ByteArrayInputStream(out.toByteArray());
    }