All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jscsi.target.settings.SingleNumericalValue Maven / Gradle / Ivy

package org.jscsi.target.settings;

import java.util.regex.Matcher;

/**
 * A {@link NumericalValue} sub-class for representing single integers.
 * 
 * @author Andreas Ergenzinger
 */
public final class SingleNumericalValue extends NumericalValue {

    /**
     * The represented integer.
     */
    private final int value;

    /**
     * The constructor.
     * 

* This method is private to enforce usage of {@link #create(int)}, similar to the way new * {@link NumericalValueRange} objects are created. * * @param value * the value of the new {@link SingleNumericalValue} */ private SingleNumericalValue(final int value) { this.value = value; } /** * Returns the represented value. * * @return the represented value */ public final int getValue() { return value; } /** * Returns a new {@link SingleNumericalValue} with the specified value. * * @param value * the value of the returned {@link SingleNumericalValue} * @return a new {@link SingleNumericalValue} */ public static final SingleNumericalValue create(final int value) { return new SingleNumericalValue(value); } /** * Parses a {@link SingleNumericalValue} from a {@link String}. The * parameter must contain an integer value in decimal, hexadecimal, or * Base64 format. If it does not, null will be returned. * * @param value * the {@link String} to parse * @return a {@link SingleNumericalValue} with the parsed value or null */ public static final SingleNumericalValue parseSingleNumericValue(final String value) { // decimal constant final Matcher decimalMatcher = DECIMAL_CONSTANT_PATTERN.matcher(value); if (decimalMatcher.matches()) return new SingleNumericalValue(parseDecimalConstantString(value)); // hex constant final Matcher hexMatcher = HEX_CONSTANT_PATTERN.matcher(value); if (hexMatcher.matches()) return new SingleNumericalValue(parseHexConstantString(value)); // base 64 constant final Matcher base64Matcher = BASE_64_CONSTANT_PATTERN.matcher(value); if (base64Matcher.matches()) return new SingleNumericalValue(parseBase64ConstantString(value)); // none of the above return null; } /** * Parses an integer value from a {@link String} encoded in decimal format. *

* This method does not check the passed {@link String} before parsing, so this method should only be used * on string which are certain to match the required format. * * @param value * a {@link String} containing (only) an integer encoded in * decimal format * @return the parsed integer */ private static final int parseDecimalConstantString(final String value) { return Integer.valueOf(value); } /** * Parses an integer value from a {@link String} encoded in hexadecimal * format. *

* This method does not check the passed {@link String} before parsing, so this method should only be used * on string which are certain to match the required format. * * @param value * a {@link String} containing (only) an integer encoded in * hexadecimal format * @return the parsed integer */ private static final int parseHexConstantString(final String value) { return Integer.parseInt(value.substring(2),// skip "0x" prefix 16); } /** * Parses an integer value from a {@link String} encoded in Base64 format. *

* This method does not check the passed {@link String} before parsing, so this method should only be used * on string which are certain to match the required format. * * @param value * a {@link String} containing (only) an integer encoded in * Base64 format * @return the parsed integer */ private static final int parseBase64ConstantString(final String value) { final String s = value.substring(2);// crop "0b"/"0B" at the beginning final int length = s.length(); int result = 0; for (int i = 0; i < length; ++i) { final char c = s.charAt(length - 1 - i); result += base64ValueOf(c) * Math.pow(64, i); } return result; } /** * See RFC 2045. * * @param c * @return */ void bla() { } /** * Returns a character's value in Base64 * * @param c * a character that is assigned a value from 0 to 63 in Base64 * @throws NumberFormatException * if the parameter is not a Base64 character * @return the character's value in Base64 */ private static final int base64ValueOf(final char c) { if ('A' <= c && c <= 'Z') return c - 'A'; if ('a' <= c && c <= 'z') return c - 'a' + 26; if ('0' <= c && c <= '9') return c - '0' + 52; if (c == '+') return 62; if (c == '/') return 63; throw new NumberFormatException(); } @Override public final String toString() { return "[" + value + "]"; } @Override public boolean contains(Object value) { if (value == null) return false; if (value instanceof SingleNumericalValue) return contains(((SingleNumericalValue)value).getValue()); if (value instanceof Integer) return contains((int)((Integer)value)); return false; } @Override public boolean contains(final int value) { if (value == this.value) return true; return false; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy