/jboss-as-7.1.1.Final/ejb3/src/main/java/org/jboss/as/ejb3/timerservice/schedule/value/RangeValue.java
# · Java · 140 lines · 57 code · 16 blank · 67 comment · 9 complexity · 59fca4892fda52bc77a1d915dded58d3 MD5 · raw file
- /*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
- package org.jboss.as.ejb3.timerservice.schedule.value;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import static org.jboss.as.ejb3.EjbMessages.MESSAGES;
- /**
- * Represents a value for a {@link javax.ejb.ScheduleExpression} which is expressed as a range type. An
- * {@link RangeValue} comprises of a start and an end value for the range, separated by a "-"
- * <p/>
- * <p>
- * Each side of the range must be an individual attribute value. Members of a range <b>cannot</b> themselves
- * be lists, wild-cards, ranges, or increments. In range x-y, if x is larger than y, the range is equivalent
- * to x-max, min-y, where max is the largest value of the corresponding attribute and min is the
- * smallest. The range x-x, where both range values are the same, evaluates to the single value x.
- * </p>
- *
- * @author Jaikiran Pai
- * @version $Revision: $
- * @see ScheduleExpressionType#RANGE
- */
- public class RangeValue implements ScheduleValue {
- /**
- * The separator which is used for parsing a {@link String} which
- * represents a {@link RangeValue}
- */
- public static final String RANGE_SEPARATOR = "-";
- private static final Pattern RANGE_PATTERN;
- static {
- final String POSITIVE_OR_NEGATIVE_INTEGER = "\\s*-?\\s*\\d+\\s*";
- final String WORD = "\\s*([1-5][a-zA-Z]{2})?\\s*[a-zA-Z]+\\s*[a-zA-Z]*\\s*";
- final String OR = "|";
- final String OPEN_GROUP = "(";
- final String CLOSE_GROUP = ")";
- String rangeRegex = OPEN_GROUP + POSITIVE_OR_NEGATIVE_INTEGER + OR + WORD + CLOSE_GROUP + RANGE_SEPARATOR
- + OPEN_GROUP + POSITIVE_OR_NEGATIVE_INTEGER + OR + WORD + CLOSE_GROUP;
- RANGE_PATTERN = Pattern.compile(rangeRegex);
- }
- /**
- * The start value of the range
- */
- private String rangeStart;
- /**
- * The end value of the range
- */
- private String rangeEnd;
- /**
- * Creates a {@link RangeValue} by parsing the passed <code>value</code>.
- * <p>
- * Upon successfully parsing the passed <code>value</code>, this constructor
- * sets the start and the end value of this {@link RangeValue}
- * </p>
- *
- * @param range The value to be parsed
- * @throws IllegalArgumentException If the passed <code>value</code> cannot be
- * represented as an {@link RangeValue}
- */
- public RangeValue(String range) {
- String[] values = getRangeValues(range);
- if (values == null || values.length != 2) {
- throw MESSAGES.invalidRange(range);
- }
- this.rangeStart = values[0].trim();
- this.rangeEnd = values[1].trim();
- }
- /**
- * Returns the start value of this {@link RangeValue}
- *
- * @return
- */
- public String getStart() {
- return this.rangeStart;
- }
- /**
- * Returns the end value of this {@link RangeValue}
- *
- * @return
- */
- public String getEnd() {
- return this.rangeEnd;
- }
- public static boolean accepts(String value) {
- if (value == null) {
- return false;
- }
- Matcher matcher = RANGE_PATTERN.matcher(value);
- return matcher.matches();
- }
- private String[] getRangeValues(String val) {
- if (val == null) {
- return null;
- }
- Matcher matcher = RANGE_PATTERN.matcher(val);
- if (!matcher.matches()) {
- return null;
- }
- String[] rangeVals = new String[2];
- rangeVals[0] = matcher.group(1);
- rangeVals[1] = matcher.group(3);
- return rangeVals;
- }
- public String asString() {
- return this.rangeStart + RANGE_SEPARATOR + this.rangeStart;
- }
- }