package ca.uhn.fhir.model.api;
/*
* #%L
* HAPI FHIR - Core Library
* %%
* Copyright (C) 2014 - 2017 University Health Network
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import static org.apache.commons.lang3.StringUtils.isNotBlank;
import java.net.URI;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.hl7.fhir.instance.model.api.IBaseCoding;
/**
* A single tag
* <p>
* Note on equality- When computing hashCode or equals values for this class, only the
* {@link #getScheme() scheme} and
* </p>
*/
public class Tag extends BaseElement implements IElement, IBaseCoding {
private static final long serialVersionUID = 1L;
public static final String ATTR_LABEL = "label";
public static final String ATTR_SCHEME = "scheme";
public static final String ATTR_TERM = "term";
/**
* Convenience constant containing the "http://hl7.org/fhir/tag" scheme value
*/
public static final String HL7_ORG_FHIR_TAG = "http://hl7.org/fhir/tag";
/**
* Convenience constant containing the "http://hl7.org/fhir/tag/profile" scheme value
*/
public static final String HL7_ORG_PROFILE_TAG = "http://hl7.org/fhir/tag/profile";
/**
* Convenience constant containing the "http://hl7.org/fhir/tag/security" scheme value
*/
public static final String HL7_ORG_SECURITY_TAG = "http://hl7.org/fhir/tag/security";
private String myLabel;
private String myScheme;
private String myTerm;
public Tag() {
}
/**
* @deprecated There is no reason to create a tag with a term and not a scheme, so this constructor will be removed
*/
@Deprecated
public Tag(String theTerm) {
this((String) null, theTerm, null);
}
public Tag(String theScheme, String theTerm) {
myScheme = theScheme;
myTerm = theTerm;
}
public Tag(String theScheme, String theTerm, String theLabel) {
myTerm = theTerm;
myLabel = theLabel;
myScheme = theScheme;
}
public Tag(URI theScheme, URI theTerm, String theLabel) {
if (theScheme != null) {
myScheme = theScheme.toASCIIString();
}
if (theTerm != null) {
myTerm = theTerm.toASCIIString();
}
myLabel = theLabel;
}
public String getLabel() {
return myLabel;
}
public String getScheme() {
return myScheme;
}
public String getTerm() {
return myTerm;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Tag other = (Tag) obj;
if (myScheme == null) {
if (other.myScheme != null)
return false;
} else if (!myScheme.equals(other.myScheme))
return false;
if (myTerm == null) {
if (other.myTerm != null)
return false;
} else if (!myTerm.equals(other.myTerm))
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((myScheme == null) ? 0 : myScheme.hashCode());
result = prime * result + ((myTerm == null) ? 0 : myTerm.hashCode());
return result;
}
/**
* Returns <code>true</code> if either scheme or term is populated.
*/
@Override
public boolean isEmpty() {
return StringUtils.isBlank(myScheme) && StringUtils.isBlank(myTerm);
}
/**
* Sets the label and returns a reference to this tag
*/
public Tag setLabel(String theLabel) {
myLabel = theLabel;
return this;
}
/**
* Sets the scheme and returns a reference to this tag
*/
public Tag setScheme(String theScheme) {
myScheme = theScheme;
return this;
}
/**
* Sets the term and returns a reference to this tag
*/
public Tag setTerm(String theTerm) {
myTerm = theTerm;
return this;
}
public String toHeaderValue() {
StringBuilder b = new StringBuilder();
b.append(this.getTerm());
if (isNotBlank(this.getLabel())) {
b.append("; label=\"").append(this.getLabel()).append('"');
}
if (isNotBlank(this.getScheme())) {
b.append("; scheme=\"").append(this.getScheme()).append('"');
}
return b.toString();
}
@Override
public String toString() {
ToStringBuilder b = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
b.append("Scheme", myScheme);
b.append("Term", myTerm);
b.append("Label", myLabel);
return b.toString();
}
@Override
public String getCode() {
return getTerm();
}
@Override
public String getDisplay() {
return getLabel();
}
@Override
public String getSystem() {
return getScheme();
}
@Override
public IBaseCoding setCode(String theTerm) {
setTerm(theTerm);
return this;
}
@Override
public IBaseCoding setDisplay(String theLabel) {
setLabel(theLabel);
return this;
}
@Override
public IBaseCoding setSystem(String theScheme) {
setScheme(theScheme);
return this;
}
}