View Javadoc

    1   /*******************************************************************************
    2    * Copyright (c) 2011 Michael Mimo Moratti.
    3    *
    4    * Michael Mimo Moratti licenses this file to you under the Apache License, version 2.0
    5    * (the "License"); you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at:
    7    *     http://www.apache.org/licenses/LICENSE-2.0
    8    * Unless required by applicable law or agreed to in writing, software
    9    * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    10   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
    11   * License for the specific language governing permissions and limitations
    12   * under the License.
    13   *******************************************************************************/
    14  package ch.mimo.netty.handler.codec.icap;
    15
    16  import java.util.regex.Matcher;
    17  import java.util.regex.Pattern;
    18
    19  import org.jboss.netty.handler.codec.http.HttpVersion;
    20
    21  /**
    22   * Provides translation and handling for Icap version string.
    23   *
    24   * @author Michael Mimo Moratti (mimo@mimo.ch)
    25   *
    26   */
    27  public final class IcapVersion {
    28
    29      private static final Pattern VERSION_PATTERN = Pattern.compile("(\\S+)/(\\d+)\\.(\\d+)");
    30
    31  	private String protocolName;
    32  	private int major;
    33  	private int minor;
    34  	private String text;
    35
    36  	public static final IcapVersion ICAP_1_0 = new IcapVersion("ICAP", 1, 0);
    37
    38  	/**
    39  	 * @param protocolName ICAP or different
    40  	 * @param major the major version
    41  	 * @param minor the minor version
    42  	 */
    43      private IcapVersion(String protocolName, int major, int minor) {
    44      	this.protocolName = protocolName;
    45      	this.major = major;
    46      	this.minor = minor;
    47      	this.text = protocolName + '/' + major + '.' + minor;
    48      }
    49
    50      /**
    51       * parses a valid icap protocol version string.
    52       * @param text the version (ICAP/1.0)
    53       */
    54      private IcapVersion(String text) {
    55      	if(text == null) {
    56      		throw new NullPointerException("text");
    57      	}
    58          Matcher m = VERSION_PATTERN.matcher(text.trim().toUpperCase());
    59          if (!m.matches()) {
    60              throw new IllegalArgumentException("invalid version format: [" + text + "]");
    61          }
    62          protocolName = m.group(1);
    63          major = Integer.parseInt(m.group(2));
    64          minor = Integer.parseInt(m.group(3));
    65          this.text = text;
    66      }
    67
    68      /**
    69       * Protocol name
    70       * @return ICAP or different.
    71       */
    72      public String getProtocolName() {
    73      	return protocolName;
    74      }
    75
    76      /**
    77       * Major version
    78       * @return 1
    79       */
    80      public int getMajorVersion() {
    81      	return major;
    82      }
    83
    84      /**
    85       * Minor version
    86       * @return 0
    87       */
    88      public int getMinorVersion() {
    89      	return minor;
    90      }
    91
    92      /**
    93       * The text representation of this version.
    94       * @return ICAP/1.0
    95       */
    96      public String getText() {
    97      	return text;
    98      }
    99
    100     /**
    101      * Returns an existing or new {@link HttpVersion} instance which matches to
    102      * the specified RTSP version string.  If the specified {@code text} is
    103      * equal to {@code "ICAP/1.0"}, {@link #ICAP_1_0} will be returned.
    104      * Otherwise, a new {@link HttpVersion} instance will be returned.
    105      */
    106     public static IcapVersion valueOf(String text) {
    107         if (text == null) {
    108             throw new NullPointerException("text");
    109         }
    110         if (text.trim().toUpperCase().equals("ICAP/1.0")) {
    111             return ICAP_1_0;
    112         }
    113
    114         return new IcapVersion(text);
    115     }
    116
    117     @Override
    118     public String toString() {
    119     	return text;
    120     }
    121 }