File createCommandFile()

in src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java [49:107]


    File createCommandFile(final CommandLine cmd, final Map<String, String> env) throws IOException {
        final Path path = Files.createTempFile("EXEC", ".TMP");
        final File script = path.toFile();
        script.deleteOnExit();
        try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(path, Charset.defaultCharset()))) {
            // add the environment as global symbols for the DCL script
            if (env != null) {
                final Set<Entry<String, String>> entries = env.entrySet();
                for (final Entry<String, String> entry : entries) {
                    writer.print("$ ");
                    writer.print(entry.getKey());
                    writer.print(" == "); // define as global symbol
                    writer.println('\"');
                    String value = entry.getValue();
                    // Any embedded " values need to be doubled
                    if (value.indexOf('\"') > 0) {
                        final StringBuilder sb = new StringBuilder();
                        for (int i = 0; i < value.length(); i++) {
                            final char c = value.charAt(i);
                            if (c == '\"') {
                                sb.append('\"');
                            }
                            sb.append(c);
                        }
                        value = sb.toString();
                    }
                    writer.print(value);
                    writer.println('\"');
                }
            }

            final String command = cmd.getExecutable();
            if (cmd.isFile()) {// We assume it is it a script file
                writer.print("$ @");
                // This is a bit crude, but seems to work
                final String[] parts = StringUtils.split(command, "/");
                writer.print(parts[0]); // device
                writer.print(":[");
                writer.print(parts[1]); // top level directory
                final int lastPart = parts.length - 1;
                for (int i = 2; i < lastPart; i++) {
                    writer.print(".");
                    writer.print(parts[i]);
                }
                writer.print("]");
                writer.print(parts[lastPart]);
            } else {
                writer.print("$ ");
                writer.print(command);
            }
            final String[] args = cmd.getArguments();
            for (final String arg : args) {
                writer.println(" -");
                writer.print(arg);
            }
            writer.println();
        }
        return script;
    }