001package org.hl7.fhir.r5.utils;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009    
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030 */
031
032
033import org.hl7.fhir.r5.model.Coding;
034
035public class CodingUtilities {
036
037  public static boolean matches(Coding coding, String system, String code) {
038    if (coding == null)
039      return false;
040    return code.equals(coding.getCode()) && system.equals(coding.getSystem());
041  }
042
043  public static String present(Coding coding) {
044    if (coding == null)
045      return "";
046    return coding.getSystem()+"::"+coding.getCode();
047  }
048
049  /**
050   * @param c the coding to compare
051   * @param fmt the format is [system](|[version])#[code], no display
052   * @return whether the code conforms to the filter
053   */
054  public static boolean filterEquals(Coding c, String fmt) {
055    if (fmt == null) {
056      return false;
057    }
058    if (fmt.contains("|")) {
059      return fmt.equals(""+c.getSystem()+"|"+c.getVersion()+"#"+c.getCode());
060    } else {
061      return fmt.equals(""+c.getSystem()+"#"+c.getCode());
062    }
063  }
064
065  /**
066   * @param c the coding to compare
067   * @param fmt the format is [system](|[version])#[code], no display
068   * @return whether the code conforms to the filter using regex
069   */
070  public static boolean filterMatches(Coding c, String fmt) {
071    if (fmt.contains("|")) {
072      return (""+c.getSystem()+"|"+c.getVersion()+"#"+c.getCode()).matches(fmt);
073    } else {
074      return (""+c.getSystem()+"#"+c.getCode()).matches(fmt);
075    }
076  }
077
078  /**
079   * @param c the coding to compare
080   * @param values a list of values, the format is [system](|[version])#[code], no display
081   * @return whether the code conforms to the filter using regex
082   */
083  public static boolean filterInList(Coding c, String[] values) {
084    for (String v : values) {
085      if (filterEquals(c, v)) {
086        return true;
087      }
088    }
089    return false;
090  }
091
092}