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.wicket.util.parse.metapattern;
018:
019: import java.util.regex.Matcher;
020:
021: /**
022: * A Group that captures integer values (positive and negative whole numbers,
023: * not Java ints).
024: *
025: * @author Jonathan Locke
026: */
027: public final class IntegerGroup extends Group {
028: private static final long serialVersionUID = 1L;
029:
030: /** The radix to use when converting Strings captured by this group. */
031: private final int radix;
032:
033: /**
034: * Constructs an IntegerGroup that parses Strings that match the INTEGER
035: * pattern in base 10.
036: *
037: * @see MetaPattern#INTEGER
038: */
039: public IntegerGroup() {
040: this (INTEGER);
041: }
042:
043: /**
044: * Constructs an IntegerGroup that parses Strings that match the given
045: * pattern in base 10.
046: *
047: * @param pattern
048: * The capturing pattern
049: */
050: public IntegerGroup(final MetaPattern pattern) {
051: this (pattern, 10);
052: }
053:
054: /**
055: * Constructs an IntegerGroup that parses Strings that match the given
056: * pattern in the given radix.
057: *
058: * @param pattern
059: * The capturing pattern
060: * @param radix
061: * The radix to use when parsing captured Strings
062: */
063: public IntegerGroup(final MetaPattern pattern, final int radix) {
064: super (pattern);
065: this .radix = radix;
066: }
067:
068: /**
069: * @param matcher
070: * The matcher
071: * @return The value
072: * @see IntegerGroup#getInt(Matcher, int)
073: */
074: public int getInt(final Matcher matcher) {
075: return getInt(matcher, -1);
076: }
077:
078: /**
079: * Gets an int by parsing the String matched by this capturing group. The
080: * IntegerGroup's radix is used in the conversion.
081: *
082: * @param matcher
083: * The matcher
084: * @param defaultValue
085: * The default value to use if this group is omitted because it
086: * is optional
087: * @return The parsed int value
088: */
089: public int getInt(final Matcher matcher, final int defaultValue) {
090: final String value = get(matcher);
091: return value == null ? defaultValue : Integer.parseInt(value,
092: radix);
093: }
094:
095: /**
096: * @param matcher
097: * The matcher
098: * @return The value
099: * @see IntegerGroup#getLong(Matcher)
100: */
101: public long getLong(final Matcher matcher) {
102: return getLong(matcher, -1L);
103: }
104:
105: /**
106: * Gets a long by parsing the String matched by this capturing group. The
107: * IntegerGroup's radix is used in the conversion. parsing radix.
108: *
109: * @param defaultValue
110: * The default value to use if this group is omitted because it
111: * is optional
112: * @param matcher
113: * The matcher
114: * @return The parsed long value
115: */
116: public long getLong(final Matcher matcher, final long defaultValue) {
117: final String value = get(matcher);
118: return value == null ? defaultValue : Long.parseLong(value,
119: radix);
120: }
121: }
|