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 package org.apache.commons.cli; 019 020 import java.io.Serializable; 021 import java.util.Collection; 022 import java.util.HashMap; 023 import java.util.Iterator; 024 import java.util.Map; 025 026 /** 027 * A group of mutually exclusive options. 028 * 029 * @author John Keyes ( john at integralsource.com ) 030 * @version $Revision: 680644 $, $Date: 2008-07-29 01:13:48 -0700 (Tue, 29 Jul 2008) $ 031 */ 032 public class OptionGroup implements Serializable 033 { 034 private static final long serialVersionUID = 1L; 035 036 /** hold the options */ 037 private Map optionMap = new HashMap(); 038 039 /** the name of the selected option */ 040 private String selected; 041 042 /** specified whether this group is required */ 043 private boolean required; 044 045 /** 046 * Add the specified <code>Option</code> to this group. 047 * 048 * @param option the option to add to this group 049 * @return this option group with the option added 050 */ 051 public OptionGroup addOption(Option option) 052 { 053 // key - option name 054 // value - the option 055 optionMap.put(option.getKey(), option); 056 057 return this; 058 } 059 060 /** 061 * @return the names of the options in this group as a 062 * <code>Collection</code> 063 */ 064 public Collection getNames() 065 { 066 // the key set is the collection of names 067 return optionMap.keySet(); 068 } 069 070 /** 071 * @return the options in this group as a <code>Collection</code> 072 */ 073 public Collection getOptions() 074 { 075 // the values are the collection of options 076 return optionMap.values(); 077 } 078 079 /** 080 * Set the selected option of this group to <code>name</code>. 081 * 082 * @param option the option that is selected 083 * @throws AlreadySelectedException if an option from this group has 084 * already been selected. 085 */ 086 public void setSelected(Option option) throws AlreadySelectedException 087 { 088 // if no option has already been selected or the 089 // same option is being reselected then set the 090 // selected member variable 091 if (selected == null || selected.equals(option.getOpt())) 092 { 093 selected = option.getOpt(); 094 } 095 else 096 { 097 throw new AlreadySelectedException(this, option); 098 } 099 } 100 101 /** 102 * @return the selected option name 103 */ 104 public String getSelected() 105 { 106 return selected; 107 } 108 109 /** 110 * @param required specifies if this group is required 111 */ 112 public void setRequired(boolean required) 113 { 114 this.required = required; 115 } 116 117 /** 118 * Returns whether this option group is required. 119 * 120 * @return whether this option group is required 121 */ 122 public boolean isRequired() 123 { 124 return required; 125 } 126 127 /** 128 * Returns the stringified version of this OptionGroup. 129 * 130 * @return the stringified representation of this group 131 */ 132 public String toString() 133 { 134 StringBuffer buff = new StringBuffer(); 135 136 Iterator iter = getOptions().iterator(); 137 138 buff.append("["); 139 140 while (iter.hasNext()) 141 { 142 Option option = (Option) iter.next(); 143 144 if (option.getOpt() != null) 145 { 146 buff.append("-"); 147 buff.append(option.getOpt()); 148 } 149 else 150 { 151 buff.append("--"); 152 buff.append(option.getLongOpt()); 153 } 154 155 buff.append(" "); 156 buff.append(option.getDescription()); 157 158 if (iter.hasNext()) 159 { 160 buff.append(", "); 161 } 162 } 163 164 buff.append("]"); 165 166 return buff.toString(); 167 } 168 }