/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.marketdata.manipulator.dsl; import java.io.Serializable; import java.util.Objects; import java.util.regex.Pattern; import com.opengamma.util.ArgumentChecker; /** * Wraps a {@link Pattern} and defines meaningful {@code equals()} and {@code hashCode()} methods. {@code Pattern} * inherits the default implementations from {@code Object} which aren't helpful for comparing logical equality. * This class removes the need to hand-code the {@code equals()} and {@code hashCode()} methods of any class that * holds a {@code Pattern}. */ public final class PatternWrapper implements Serializable { private final Pattern _pattern; /** * @param pattern The pattern to wrap, not null */ private PatternWrapper(Pattern pattern) { ArgumentChecker.notNull(pattern, "p"); _pattern = pattern; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } PatternWrapper that = (PatternWrapper) o; return Objects.equals(_pattern.pattern(), that._pattern.pattern()) && Objects.equals(_pattern.flags(), that._pattern.flags()); } @Override public int hashCode() { return Objects.hash(_pattern.pattern(), _pattern.flags()); } /** * @return The wrapped pattern, not null */ public Pattern getPattern() { return _pattern; } /** * Wraps a {@link Pattern} * @param pattern The pattern to wrap, may be null * @return A wrapped pattern or null if the argument is null */ public static PatternWrapper wrap(Pattern pattern) { if (pattern == null) { return null; } return new PatternWrapper(pattern); } @Override public String toString() { String pattern; Integer flags; if (_pattern == null) { pattern = null; flags = null; } else { pattern = _pattern.pattern(); flags = _pattern.flags(); } return "PatternWrapper [pattern=" + pattern + ", flags=" + flags + "]"; } }