package ca.uhn.fhir.tinder.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public class Extension extends Child {
private List<Extension> myChildExtensions;
private String myUrl;
public Extension() {
super();
}
public List<Extension> getChildExtensionsWithChildren() {
ArrayList<Extension> retVal = new ArrayList<Extension>();
for (Extension next : getChildExtensions()) {
if (next.getChildExtensions().size() > 0) {
retVal.add(next);
}
}
return retVal;
}
public Extension(String theName, String theUrl, Extension... theChildExtensions) {
setName(theName);
setUrl(theUrl);
setCardMin("0");
setCardMax("*");
if (theChildExtensions != null) {
setChildExtensions(Arrays.asList(theChildExtensions));
}
}
public Extension(String theName, String theUrl, String theDatatype) {
setName(theName);
setUrl(theUrl);
setTypeFromString(theDatatype);
setCardMin("0");
setCardMax("*");
}
public List<Extension> getChildExtensions() {
if (myChildExtensions == null) {
myChildExtensions = new ArrayList<Extension>();
}
return myChildExtensions;
}
public String getNameType() {
return getName().substring(0, 1).toUpperCase() + getName().substring(1);
}
public String getUrl() {
return myUrl;
}
public boolean isHasChildExtensions() {
return getChildExtensions().size() > 0;
}
public void setChildExtensions(List<Extension> theChildExtensions) {
if (theChildExtensions != null && theChildExtensions.size() > 0 && getType().size() > 0) {
throw new IllegalArgumentException("Extension may not have a datatype AND child extensions");
}
myChildExtensions = theChildExtensions;
}
@Override
public void setElementNameAndDeriveParentElementName(String theName) {
super.setElementNameAndDeriveParentElementName(theName);
if (getName() == null) {
super.setName(theName);
}
}
@Override
public void setName(String theName) {
super.setName(theName);
if (getElementName() == null) {
super.setElementNameAndDeriveParentElementName(theName);
}
}
@Override
public void setTypeFromString(String theType) {
if (myChildExtensions != null && myChildExtensions.size() > 0 && StringUtils.isNotBlank(theType)) {
throw new IllegalArgumentException("Extension may not have a datatype AND child extensions");
}
super.setTypeFromString(theType);
}
public void setUrl(String theUrl) {
myUrl = theUrl;
}
@Override
public String getSingleType() {
if (isHasChildExtensions()) {
return getNameType();
}
return super.getSingleType();
}
}