1 /**
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.cli2.builder;
18
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import org.apache.commons.cli2.Group;
23 import org.apache.commons.cli2.Option;
24 import org.apache.commons.cli2.option.GroupImpl;
25
26 /**
27 * Builds Group instances
28 */
29 public class GroupBuilder {
30
31 private String name;
32 private String description;
33 private List options;
34 private int minimum;
35 private int maximum;
36 private boolean required;
37
38 /**
39 * Creates a new GroupBuilder
40 */
41 public GroupBuilder() {
42 reset();
43 }
44
45 /**
46 * Creates a new Group instance
47 * @return the new Group instance
48 */
49 public Group create() {
50 final GroupImpl group =
51 new GroupImpl(options, name, description, minimum, maximum, required);
52
53 reset();
54
55 return group;
56 }
57
58 /**
59 * Resets the builder.
60 * @return this builder
61 */
62 public GroupBuilder reset() {
63 name = null;
64 description = null;
65 options = new ArrayList();
66 minimum = 0;
67 maximum = Integer.MAX_VALUE;
68 required = true;
69 return this;
70 }
71
72 /**
73 * Use this option description.
74 * @param newDescription the description to use
75 * @return this builder
76 */
77 public GroupBuilder withDescription(final String newDescription) {
78 this.description = newDescription;
79 return this;
80 }
81
82 /**
83 * Use this option name
84 * @param newName the name to use
85 * @return this builder
86 */
87 public GroupBuilder withName(final String newName) {
88 this.name = newName;
89 return this;
90 }
91
92 /**
93 * A valid group requires at least this many options present
94 * @param newMinimum the minimum Options required
95 * @return this builder
96 */
97 public GroupBuilder withMinimum(final int newMinimum) {
98 this.minimum = newMinimum;
99 return this;
100 }
101
102 /**
103 * A valid group requires at most this many options present
104 * @param newMaximum the maximum Options allowed
105 * @return this builder
106 */
107 public GroupBuilder withMaximum(final int newMaximum) {
108 this.maximum = newMaximum;
109 return this;
110 }
111
112 /**
113 * Add this option to the group
114 * @param option the Option to add
115 * @return this builder
116 */
117 public GroupBuilder withOption(final Option option) {
118 this.options.add(option);
119 return this;
120 }
121
122 /**
123 * Sets the required flag. This flag is evaluated for groups that are
124 * added to other groups as child groups. If set to <b>true</b> the
125 * minimum and maximum constraints of the child group are always evaluated.
126 * @param newRequired the required flag
127 * @return this builder
128 */
129 public GroupBuilder withRequired(final boolean newRequired) {
130 this.required = newRequired;
131 return this;
132 }
133 }