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    package org.apache.geronimo.cli.daemon;
018    
019    import java.io.OutputStream;
020    
021    import org.apache.commons.cli.Option;
022    import org.apache.commons.cli.OptionBuilder;
023    import org.apache.commons.cli.OptionGroup;
024    import org.apache.geronimo.cli.BaseCLParser;
025    import org.apache.geronimo.cli.PrintHelper;
026    
027    
028    /**
029     * @version $Rev: 476049 $ $Date: 2006-11-17 15:35:17 +1100 (Fri, 17 Nov 2006) $
030     */
031    public class DaemonCLParser extends BaseCLParser {
032        private final static String ARGUMENT_NO_PROGRESS_SHORTFORM = "q";
033        private final static String ARGUMENT_NO_PROGRESS = "quiet";
034        
035        private final static String ARGUMENT_LONG_PROGRESS_SHORTFORM = "l";
036        private final static String ARGUMENT_LONG_PROGRESS = "long";
037        
038        private final static String ARGUMENT_MODULE_OVERRIDE_SHORTFORM = "o";
039        private final static String ARGUMENT_MODULE_OVERRIDE = "override";
040        
041        public DaemonCLParser(OutputStream out) {
042            super(out);
043            addProgressOptions();
044            addOverride();
045        }
046    
047        public boolean isNoProgress() {
048            return commandLine.hasOption(ARGUMENT_NO_PROGRESS_SHORTFORM);
049        }
050    
051        public boolean isLongProgress() {
052            return commandLine.hasOption(ARGUMENT_LONG_PROGRESS_SHORTFORM);
053        }
054    
055        public String[] getOverride() {
056            return commandLine.getOptionValues(ARGUMENT_MODULE_OVERRIDE_SHORTFORM);
057        }
058        
059        public void displayHelp() {
060            PrintHelper printHelper = new PrintHelper(out);
061            printHelper.printHelp("java -jar bin/server.jar $options",
062                    "\nThe following options are available:",
063                    options,
064                    "\nIn addition you may specify a replacement for var/config/config.xml by setting the property "
065                            + "-Dorg.apache.geronimo.config.file=var/config/<my-config.xml>. "
066                            + "This is resolved relative to the geronimo base directory.\n",
067                    true);
068        }
069        
070        protected void addOverride() {
071            OptionBuilder optionBuilder = OptionBuilder.hasArgs().withArgName("moduleId ...");
072            optionBuilder = optionBuilder.withLongOpt(ARGUMENT_MODULE_OVERRIDE);
073            optionBuilder = optionBuilder.withDescription("USE WITH CAUTION!  Overrides the modules in "
074                    + "var/config/config.xml such that only the modules listed on "
075                    + "the command line will be started.  Note that many J2EE "
076                    + "features depend on certain modules being started, so you "
077                    + "should be very careful what you omit.  Any arguments after "
078                    + "this are assumed to be module names.");
079            Option option = optionBuilder.create(ARGUMENT_MODULE_OVERRIDE_SHORTFORM);
080            options.addOption(option);
081        }
082    
083        protected void addProgressOptions() {
084            OptionGroup optionGroup = new OptionGroup();
085    
086            Option option = new Option(ARGUMENT_NO_PROGRESS_SHORTFORM,
087                    ARGUMENT_NO_PROGRESS,
088                    false,
089                    "Suppress the normal startup progress bar. This is typically "
090                            + "used when redirecting console output to a file, or starting "
091                            + "the server from an IDE or other tool.");
092            optionGroup.addOption(option);
093    
094            option = new Option(ARGUMENT_LONG_PROGRESS_SHORTFORM,
095                    ARGUMENT_LONG_PROGRESS,
096                    false,
097                    "Write startup progress to the console in a format that is "
098                            + "suitable for redirecting console output to a file, or starting "
099                            + "the server from an IDE or other tool (doesn't use linefeeds to "
100                            + "update the progress information that is used by default if you " + "don't specify "
101                            + ARGUMENT_NO_PROGRESS + " or " + ARGUMENT_LONG_PROGRESS + ").");
102            optionGroup.addOption(option);
103    
104            options.addOptionGroup(optionGroup);
105        }
106    
107    }