package ca.uhn.fhir.tinder.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.ObjectUtils;
import org.codehaus.plexus.util.StringUtils;
public class ValueSetTm {
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ValueSetTm.class);
private String myClassName;
private List<Code> myCodes = new ArrayList<Code>();
private String myDescription;
private String myId;
private String myName;
private Set<String> myCodeValues = new HashSet<String>();
public void addConcept(String theSystem, String theCode, String theText, String theDefinition) {
String key = theSystem + "|" + theCode;
if (myCodeValues.contains(key)) {
return;
}
myCodeValues.add(key);
myCodes.add(new Code(theSystem, theCode, theText, theDefinition));
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ValueSetTm other = (ValueSetTm) obj;
String id1 = myId != null && myId.isEmpty() == false ? myId : myName;
String id2 = other.myId != null && other.myId.isEmpty() == false ? other.myId : other.myName;
id1 = StringUtils.defaultString(id1);
id2 = StringUtils.defaultString(id2);
return id1.equals(id2);
}
public String getClassName() {
return myClassName;
}
public List<Code> getCodes() {
return Collections.unmodifiableList(myCodes);
}
public String getDescription() {
return StringUtils.defaultString(myDescription);
}
public String getId() {
return myId;
}
public String getName() {
return StringUtils.defaultString(myName);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((myId == null) ? 0 : myId.hashCode());
return result;
}
public void setClassName(String theClassName) {
myClassName = theClassName;
}
public void setCodes(List<Code> theCodes) {
myCodes = theCodes;
}
public void setDescription(String theDescription) {
myDescription = theDescription;
}
public void setId(String theId) {
myId = theId;
}
public void setName(String theName) {
myName = theName;
}
public class Code {
private String myCode;
private String myDefinition;
private String myDisplay;
private String mySystem;
private Code(String theSystem, String theCode, String theDisplay, String theDefinition) {
mySystem = theSystem;
myCode = theCode.trim();
myDisplay = theDisplay;
myDefinition = theDefinition;
}
public String getSystem() {
return mySystem;
}
public String getCode() {
return myCode;
}
public String getCodeEnumValue() {
String retVal = myDisplay;
if (StringUtils.isBlank(retVal)) {
retVal = myCode;
if (Character.isDigit(myCode.charAt(0))) {
if (StringUtils.isNotBlank(myDefinition)) {
if (myDefinition.length() < 100) {
String newValue = myDefinition;
if (newValue.contains(",")) {
newValue = newValue.substring(0, newValue.indexOf(','));
}
if (newValue.contains("(")) {
newValue = newValue.substring(0, newValue.indexOf('('));
}
newValue = newValue.replace(" / ", " OR ");
while (!Character.isLetterOrDigit(newValue.charAt(newValue.length() - 1))) {
newValue = newValue.substring(0, newValue.length() - 1);
}
ourLog.info("[{}] Replacing numeric code {} with description: {}", new Object[] { myName, retVal, newValue });
retVal = newValue;
}
}
}
}
if ("=".equals(retVal)) {
retVal = "EQUALS";
}
if ("<=".equals(retVal)) {
retVal = "LESSTHAN_OR_EQUALS";
}
if ("<".equals(retVal)) {
retVal = "LESSTHAN";
}
if (">=".equals(retVal)) {
retVal = "GREATERTHAN_OR_EQUALS";
}
if (">".equals(retVal)) {
retVal = "GREATERTHAN";
}
StringBuilder b = new StringBuilder();
for (char next : retVal.toUpperCase().replace("'", "").replace("(", "").replace(")", "").toCharArray()) {
if (Character.isJavaIdentifierPart(next)) {
b.append(next);
} else {
b.append("_");
}
}
retVal = b.toString();
if (!Character.isJavaIdentifierStart(retVal.charAt(0))) {
retVal = '_' + retVal;
}
return retVal;
}
public String getDefinition() {
return myDefinition;
}
public String getDisplay() {
return myDisplay;
}
public boolean isHasDefinition() {
return StringUtils.isNotBlank(myDefinition);
}
public boolean isHasDisplay() {
return StringUtils.isNotBlank(myDisplay);
}
}
}