001    /* 
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     *
017     */
018    
019    package org.apache.commons.exec.launcher;
020    
021    import java.io.File;
022    import java.io.IOException;
023    import java.util.Map;
024    
025    import org.apache.commons.exec.CommandLine;
026    
027    /**
028     * A command launcher for OS/2 that uses 'cmd.exe' when launching commands in
029     * directories other than the current working directory.
030     * <p>
031     * Unlike Windows NT and friends, OS/2's cd doesn't support the /d switch to
032     * change drives and directories in one go.
033     * </p>
034     * Please not that this class is currently unused because the Java13CommandLauncher
035     * is used for 0S/2
036     */
037    public class OS2CommandLauncher extends CommandLauncherProxy {
038    
039        public OS2CommandLauncher(final CommandLauncher launcher) {
040            super(launcher);
041        }
042    
043        /**
044         * Launches the given command in a new process, in the given working
045         * directory.
046         * 
047         * @param cmd
048         *            the command line to execute as an array of strings
049         * @param env
050         *            the environment to set as an array of strings
051         * @param workingDir
052         *            working directory where the command should run
053         * @throws IOException
054         *             forwarded from the exec method of the command launcher
055         */
056        public Process exec(final CommandLine cmd, final Map env,
057                final File workingDir) throws IOException {
058            if (workingDir == null) {
059                return exec(cmd, env);
060            }
061    
062            CommandLine newCmd = new CommandLine("cmd");
063            newCmd.addArgument("/c");
064            newCmd.addArguments(cmd.toStrings());
065    
066            return exec(newCmd, env);
067        }
068    }