Fixing URL detection
This commit is contained in:
parent
80826b62fd
commit
2c425ca144
|
@ -41,6 +41,7 @@ import ca.uhn.fhir.model.primitive.BoundCodeDt;
|
||||||
import ca.uhn.fhir.model.primitive.BoundCodeableConceptDt;
|
import ca.uhn.fhir.model.primitive.BoundCodeableConceptDt;
|
||||||
import ca.uhn.fhir.model.primitive.CodeDt;
|
import ca.uhn.fhir.model.primitive.CodeDt;
|
||||||
import ca.uhn.fhir.model.primitive.DateDt;
|
import ca.uhn.fhir.model.primitive.DateDt;
|
||||||
|
import ca.uhn.fhir.model.primitive.DecimalDt;
|
||||||
import ca.uhn.fhir.model.primitive.ICodedDatatype;
|
import ca.uhn.fhir.model.primitive.ICodedDatatype;
|
||||||
import ca.uhn.fhir.model.primitive.XhtmlDt;
|
import ca.uhn.fhir.model.primitive.XhtmlDt;
|
||||||
import ca.uhn.fhir.util.ReflectionUtil;
|
import ca.uhn.fhir.util.ReflectionUtil;
|
||||||
|
@ -125,6 +126,7 @@ class ModelScanner {
|
||||||
private void init(Set<Class<? extends IElement>> toScan) {
|
private void init(Set<Class<? extends IElement>> toScan) {
|
||||||
toScan.add(DateDt.class);
|
toScan.add(DateDt.class);
|
||||||
toScan.add(CodeDt.class);
|
toScan.add(CodeDt.class);
|
||||||
|
toScan.add(DecimalDt.class);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
for (Class<? extends IElement> nextClass : toScan) {
|
for (Class<? extends IElement> nextClass : toScan) {
|
||||||
|
|
|
@ -26,6 +26,9 @@ public abstract class BaseElement implements IElement, ISupportsUndeclaredExtens
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IdDt getId() {
|
public IdDt getId() {
|
||||||
|
if (myId == null) {
|
||||||
|
myId = new IdDt();
|
||||||
|
}
|
||||||
return myId;
|
return myId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package ca.uhn.fhir.model.api;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
|
|
||||||
|
public interface IQueryParameterAnd {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @see See FHIR specification
|
||||||
|
* <a href="http://www.hl7.org/implement/standards/fhir/search.html#ptypes">2.2.2 Search SearchParameter Types</a>
|
||||||
|
* for information on the <b>token</b> format
|
||||||
|
*/
|
||||||
|
public void setValuesAsQueryTokens(List<List<String>> theParameters) throws InvalidRequestException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @see See FHIR specification
|
||||||
|
* <a href="http://www.hl7.org/implement/standards/fhir/search.html#ptypes">2.2.2 Search SearchParameter Types</a>
|
||||||
|
* for information on the <b>token</b> format
|
||||||
|
*/
|
||||||
|
public List<List<String>> getValuesAsQueryTokens();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -137,6 +137,13 @@ public class NarrativeDt extends BaseElement implements ICompositeDatatype {
|
||||||
myDiv = theValue;
|
myDiv = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the value using a textual DIV (or simple text block which will be
|
||||||
|
* converted to XHTML)
|
||||||
|
*/
|
||||||
|
public void setDiv(String theTextDiv) {
|
||||||
|
myDiv = new XhtmlDt(theTextDiv);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -296,10 +296,10 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
private DateTimeDt myIssued;
|
private DateTimeDt myIssued;
|
||||||
|
|
||||||
@Child(name="subject", order=3, min=1, max=1, type={
|
@Child(name="subject", order=3, min=1, max=1, type={
|
||||||
ca.uhn.fhir.model.dstu.resource.Patient.class,
|
Patient.class,
|
||||||
ca.uhn.fhir.model.dstu.resource.Group.class,
|
Group.class,
|
||||||
ca.uhn.fhir.model.dstu.resource.Device.class,
|
Device.class,
|
||||||
ca.uhn.fhir.model.dstu.resource.Location.class,
|
Location.class,
|
||||||
})
|
})
|
||||||
@Description(
|
@Description(
|
||||||
shortDefinition="The subject of the report, usually, but not always, the patient",
|
shortDefinition="The subject of the report, usually, but not always, the patient",
|
||||||
|
@ -308,8 +308,8 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
private ResourceReferenceDt mySubject;
|
private ResourceReferenceDt mySubject;
|
||||||
|
|
||||||
@Child(name="performer", order=4, min=1, max=1, type={
|
@Child(name="performer", order=4, min=1, max=1, type={
|
||||||
ca.uhn.fhir.model.dstu.resource.Practitioner.class,
|
Practitioner.class,
|
||||||
ca.uhn.fhir.model.dstu.resource.Organization.class,
|
Organization.class,
|
||||||
})
|
})
|
||||||
@Description(
|
@Description(
|
||||||
shortDefinition="Responsible Diagnostic Service",
|
shortDefinition="Responsible Diagnostic Service",
|
||||||
|
@ -325,7 +325,7 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
private IdentifierDt myIdentifier;
|
private IdentifierDt myIdentifier;
|
||||||
|
|
||||||
@Child(name="requestDetail", order=6, min=0, max=Child.MAX_UNLIMITED, type={
|
@Child(name="requestDetail", order=6, min=0, max=Child.MAX_UNLIMITED, type={
|
||||||
ca.uhn.fhir.model.dstu.resource.DiagnosticOrder.class,
|
DiagnosticOrder.class,
|
||||||
})
|
})
|
||||||
@Description(
|
@Description(
|
||||||
shortDefinition="What was requested",
|
shortDefinition="What was requested",
|
||||||
|
@ -351,7 +351,7 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
private IDatatype myDiagnostic;
|
private IDatatype myDiagnostic;
|
||||||
|
|
||||||
@Child(name="specimen", order=9, min=0, max=Child.MAX_UNLIMITED, type={
|
@Child(name="specimen", order=9, min=0, max=Child.MAX_UNLIMITED, type={
|
||||||
ca.uhn.fhir.model.dstu.resource.Specimen.class,
|
Specimen.class,
|
||||||
})
|
})
|
||||||
@Description(
|
@Description(
|
||||||
shortDefinition="Specimens this report is based on",
|
shortDefinition="Specimens this report is based on",
|
||||||
|
@ -360,7 +360,7 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
private java.util.List<ResourceReferenceDt> mySpecimen;
|
private java.util.List<ResourceReferenceDt> mySpecimen;
|
||||||
|
|
||||||
@Child(name="result", order=10, min=0, max=Child.MAX_UNLIMITED, type={
|
@Child(name="result", order=10, min=0, max=Child.MAX_UNLIMITED, type={
|
||||||
ca.uhn.fhir.model.dstu.resource.Observation.class,
|
Observation.class,
|
||||||
})
|
})
|
||||||
@Description(
|
@Description(
|
||||||
shortDefinition="Observations - simple, or complex nested groups",
|
shortDefinition="Observations - simple, or complex nested groups",
|
||||||
|
@ -369,7 +369,7 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
private java.util.List<ResourceReferenceDt> myResult;
|
private java.util.List<ResourceReferenceDt> myResult;
|
||||||
|
|
||||||
@Child(name="imagingStudy", order=11, min=0, max=Child.MAX_UNLIMITED, type={
|
@Child(name="imagingStudy", order=11, min=0, max=Child.MAX_UNLIMITED, type={
|
||||||
ca.uhn.fhir.model.dstu.resource.ImagingStudy.class,
|
ImagingStudy.class,
|
||||||
})
|
})
|
||||||
@Description(
|
@Description(
|
||||||
shortDefinition="Reference to full details of imaging associated with the diagnostic report",
|
shortDefinition="Reference to full details of imaging associated with the diagnostic report",
|
||||||
|
@ -451,7 +451,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>status</b> (registered | partial | final | corrected +).
|
* Gets the value(s) for <b>status</b> (registered | partial | final | corrected +).
|
||||||
* creating it if it does
|
* creating it if it does
|
||||||
|
@ -481,7 +480,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
myStatus = theValue;
|
myStatus = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the value(s) for <b>status</b> (registered | partial | final | corrected +)
|
* Sets the value(s) for <b>status</b> (registered | partial | final | corrected +)
|
||||||
*
|
*
|
||||||
|
@ -524,6 +522,17 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
myIssued = theValue;
|
myIssued = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the value for <b>issued</b> (Date this version was released)
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* <b>Definition:</b>
|
||||||
|
* The date and/or time that this version of the report was released from the source diagnostic service
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public void setIssuedWithSecondsPrecision( Date theDate) {
|
||||||
|
myIssued = new DateTimeDt(theDate);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the value for <b>issued</b> (Date this version was released)
|
* Sets the value for <b>issued</b> (Date this version was released)
|
||||||
|
@ -537,18 +546,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
myIssued = new DateTimeDt(theDate, thePrecision);
|
myIssued = new DateTimeDt(theDate, thePrecision);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the value for <b>issued</b> (Date this version was released)
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* <b>Definition:</b>
|
|
||||||
* The date and/or time that this version of the report was released from the source diagnostic service
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
public void setIssuedWithSecondsPrecision( Date theDate) {
|
|
||||||
myIssued = new DateTimeDt(theDate);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>subject</b> (The subject of the report, usually, but not always, the patient).
|
* Gets the value(s) for <b>subject</b> (The subject of the report, usually, but not always, the patient).
|
||||||
|
@ -577,7 +574,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>performer</b> (Responsible Diagnostic Service).
|
* Gets the value(s) for <b>performer</b> (Responsible Diagnostic Service).
|
||||||
* creating it if it does
|
* creating it if it does
|
||||||
|
@ -605,7 +601,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>identifier</b> (Id for external references to this report).
|
* Gets the value(s) for <b>identifier</b> (Id for external references to this report).
|
||||||
* creating it if it does
|
* creating it if it does
|
||||||
|
@ -636,7 +631,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>requestDetail</b> (What was requested).
|
* Gets the value(s) for <b>requestDetail</b> (What was requested).
|
||||||
* creating it if it does
|
* creating it if it does
|
||||||
|
@ -666,7 +660,19 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
myRequestDetail = theValue;
|
myRequestDetail = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds and returns a new value for <b>requestDetail</b> (What was requested)
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* <b>Definition:</b>
|
||||||
|
* Details concerning a test requested.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public ResourceReferenceDt addRequestDetail() {
|
||||||
|
ResourceReferenceDt newType = new ResourceReferenceDt();
|
||||||
|
getRequestDetail().add(newType);
|
||||||
|
return newType;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>serviceCategory</b> (Biochemistry, Hematology etc.).
|
* Gets the value(s) for <b>serviceCategory</b> (Biochemistry, Hematology etc.).
|
||||||
|
@ -698,7 +704,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>diagnostic[x]</b> (Physiologically Relevant time/time-period for report).
|
* Gets the value(s) for <b>diagnostic[x]</b> (Physiologically Relevant time/time-period for report).
|
||||||
* creating it if it does
|
* creating it if it does
|
||||||
|
@ -726,7 +731,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>specimen</b> (Specimens this report is based on).
|
* Gets the value(s) for <b>specimen</b> (Specimens this report is based on).
|
||||||
* creating it if it does
|
* creating it if it does
|
||||||
|
@ -756,7 +760,19 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
mySpecimen = theValue;
|
mySpecimen = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds and returns a new value for <b>specimen</b> (Specimens this report is based on)
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* <b>Definition:</b>
|
||||||
|
* Details about the specimens on which this Disagnostic report is based
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public ResourceReferenceDt addSpecimen() {
|
||||||
|
ResourceReferenceDt newType = new ResourceReferenceDt();
|
||||||
|
getSpecimen().add(newType);
|
||||||
|
return newType;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>result</b> (Observations - simple, or complex nested groups).
|
* Gets the value(s) for <b>result</b> (Observations - simple, or complex nested groups).
|
||||||
|
@ -787,7 +803,19 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
myResult = theValue;
|
myResult = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds and returns a new value for <b>result</b> (Observations - simple, or complex nested groups)
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* <b>Definition:</b>
|
||||||
|
* Observations that are part of this diagnostic report. Observations can be simple name/value pairs (e.g. \"atomic\" results), or they can be grouping observations that include references to other members of the group (e.g. \"panels\")
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public ResourceReferenceDt addResult() {
|
||||||
|
ResourceReferenceDt newType = new ResourceReferenceDt();
|
||||||
|
getResult().add(newType);
|
||||||
|
return newType;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>imagingStudy</b> (Reference to full details of imaging associated with the diagnostic report).
|
* Gets the value(s) for <b>imagingStudy</b> (Reference to full details of imaging associated with the diagnostic report).
|
||||||
|
@ -818,7 +846,19 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
myImagingStudy = theValue;
|
myImagingStudy = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds and returns a new value for <b>imagingStudy</b> (Reference to full details of imaging associated with the diagnostic report)
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* <b>Definition:</b>
|
||||||
|
* One or more links to full details of any imaging performed during the diagnostic investigation. Typically, this is imaging performed by DICOM enabled modalities, but this is not required. A fully enabled PACS viewer can use this information to provide views of the source images
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public ResourceReferenceDt addImagingStudy() {
|
||||||
|
ResourceReferenceDt newType = new ResourceReferenceDt();
|
||||||
|
getImagingStudy().add(newType);
|
||||||
|
return newType;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>image</b> (Key images associated with this report).
|
* Gets the value(s) for <b>image</b> (Key images associated with this report).
|
||||||
|
@ -863,7 +903,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
return newType;
|
return newType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>conclusion</b> (Clinical Interpretation of test results).
|
* Gets the value(s) for <b>conclusion</b> (Clinical Interpretation of test results).
|
||||||
* creating it if it does
|
* creating it if it does
|
||||||
|
@ -893,7 +932,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
myConclusion = theValue;
|
myConclusion = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the value for <b>conclusion</b> (Clinical Interpretation of test results)
|
* Sets the value for <b>conclusion</b> (Clinical Interpretation of test results)
|
||||||
*
|
*
|
||||||
|
@ -950,7 +988,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
return newType;
|
return newType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the value(s) for <b>presentedForm</b> (Entire Report as issued).
|
* Gets the value(s) for <b>presentedForm</b> (Entire Report as issued).
|
||||||
* creating it if it does
|
* creating it if it does
|
||||||
|
@ -994,7 +1031,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
return newType;
|
return newType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Block class for child element: <b>DiagnosticReport.image</b> (Key images associated with this report)
|
* Block class for child element: <b>DiagnosticReport.image</b> (Key images associated with this report)
|
||||||
*
|
*
|
||||||
|
@ -1014,7 +1050,7 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
private StringDt myComment;
|
private StringDt myComment;
|
||||||
|
|
||||||
@Child(name="link", order=1, min=1, max=1, type={
|
@Child(name="link", order=1, min=1, max=1, type={
|
||||||
ca.uhn.fhir.model.dstu.resource.Media.class,
|
Media.class,
|
||||||
})
|
})
|
||||||
@Description(
|
@Description(
|
||||||
shortDefinition="Reference to the image source",
|
shortDefinition="Reference to the image source",
|
||||||
|
@ -1067,7 +1103,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
myComment = theValue;
|
myComment = theValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the value for <b>comment</b> (Comment about the image (e.g. explanation))
|
* Sets the value for <b>comment</b> (Comment about the image (e.g. explanation))
|
||||||
*
|
*
|
||||||
|
@ -1112,7 +1147,6 @@ public class DiagnosticReport extends BaseResource implements IResource {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package ca.uhn.fhir.model.primitive;
|
package ca.uhn.fhir.model.primitive;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.math.MathContext;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
|
||||||
import ca.uhn.fhir.model.api.BasePrimitive;
|
import ca.uhn.fhir.model.api.BasePrimitive;
|
||||||
import ca.uhn.fhir.model.api.annotation.DatatypeDef;
|
import ca.uhn.fhir.model.api.annotation.DatatypeDef;
|
||||||
|
@ -35,6 +37,31 @@ public class DecimalDt extends BasePrimitive<BigDecimal> {
|
||||||
setValue(new BigDecimal(theValue));
|
setValue(new BigDecimal(theValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rounds the value to the given prevision
|
||||||
|
*
|
||||||
|
* @see MathContext#getPrecision()
|
||||||
|
*/
|
||||||
|
public void round(int thePrecision) {
|
||||||
|
if (getValue()!=null) {
|
||||||
|
BigDecimal newValue = getValue().round(new MathContext(thePrecision));
|
||||||
|
setValue(newValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rounds the value to the given prevision
|
||||||
|
*
|
||||||
|
* @see MathContext#getPrecision()
|
||||||
|
* @see MathContext#getRoundingMode()
|
||||||
|
*/
|
||||||
|
public void round(int thePrecision, RoundingMode theRoundingMode) {
|
||||||
|
if (getValue()!=null) {
|
||||||
|
BigDecimal newValue = getValue().round(new MathContext(thePrecision, theRoundingMode));
|
||||||
|
setValue(newValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -114,4 +114,16 @@ public class IdDt extends BasePrimitive<String> {
|
||||||
return myValue;
|
return myValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value of this ID as a big decimal, or <code>null</code> if the value is null
|
||||||
|
*
|
||||||
|
* @throws NumberFormatException If the value is not a valid BigDecimal
|
||||||
|
*/
|
||||||
|
public BigDecimal asBigDecimal() {
|
||||||
|
if (getValue() == null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new BigDecimal(getValueAsString());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,16 +66,17 @@ public class XhtmlDt extends BasePrimitive<List<XMLEvent>> {
|
||||||
XMLEventReader er = XMLInputFactory.newInstance().createXMLEventReader(new StringReader(val));
|
XMLEventReader er = XMLInputFactory.newInstance().createXMLEventReader(new StringReader(val));
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
while (er.hasNext()) {
|
while (er.hasNext()) {
|
||||||
|
XMLEvent next = er.nextEvent();
|
||||||
if (first) {
|
if (first) {
|
||||||
first = false;
|
first = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
XMLEvent next = er.nextEvent();
|
|
||||||
if (er.hasNext()) {
|
if (er.hasNext()) {
|
||||||
// don't add the last event
|
// don't add the last event
|
||||||
value.add(next);
|
value.add(next);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setValue(value);
|
||||||
|
|
||||||
} catch (XMLStreamException e) {
|
} catch (XMLStreamException e) {
|
||||||
throw new DataFormatException("String does not appear to be valid XML/XHTML", e);
|
throw new DataFormatException("String does not appear to be valid XML/XHTML", e);
|
||||||
|
|
|
@ -43,6 +43,7 @@ import ca.uhn.fhir.model.api.IPrimitiveDatatype;
|
||||||
import ca.uhn.fhir.model.api.IResource;
|
import ca.uhn.fhir.model.api.IResource;
|
||||||
import ca.uhn.fhir.model.api.ISupportsUndeclaredExtensions;
|
import ca.uhn.fhir.model.api.ISupportsUndeclaredExtensions;
|
||||||
import ca.uhn.fhir.model.api.UndeclaredExtension;
|
import ca.uhn.fhir.model.api.UndeclaredExtension;
|
||||||
|
import ca.uhn.fhir.model.dstu.composite.ContainedDt;
|
||||||
import ca.uhn.fhir.model.dstu.composite.ResourceReferenceDt;
|
import ca.uhn.fhir.model.dstu.composite.ResourceReferenceDt;
|
||||||
import ca.uhn.fhir.model.primitive.InstantDt;
|
import ca.uhn.fhir.model.primitive.InstantDt;
|
||||||
import ca.uhn.fhir.model.primitive.StringDt;
|
import ca.uhn.fhir.model.primitive.StringDt;
|
||||||
|
@ -122,7 +123,7 @@ public class XmlParser extends BaseParser implements IParser {
|
||||||
eventWriter.writeAttribute("type", "text/xml");
|
eventWriter.writeAttribute("type", "text/xml");
|
||||||
|
|
||||||
IResource resource = nextEntry.getResource();
|
IResource resource = nextEntry.getResource();
|
||||||
encodeResourceToXmlStreamWriter(resource, eventWriter);
|
encodeResourceToXmlStreamWriter(resource, eventWriter, false);
|
||||||
|
|
||||||
eventWriter.writeEndElement(); // content
|
eventWriter.writeEndElement(); // content
|
||||||
eventWriter.writeEndElement(); // entry
|
eventWriter.writeEndElement(); // entry
|
||||||
|
@ -149,7 +150,7 @@ public class XmlParser extends BaseParser implements IParser {
|
||||||
eventWriter = myXmlOutputFactory.createXMLStreamWriter(stringWriter);
|
eventWriter = myXmlOutputFactory.createXMLStreamWriter(stringWriter);
|
||||||
eventWriter = decorateStreamWriter(eventWriter);
|
eventWriter = decorateStreamWriter(eventWriter);
|
||||||
|
|
||||||
encodeResourceToXmlStreamWriter(theResource, eventWriter);
|
encodeResourceToXmlStreamWriter(theResource, eventWriter, false);
|
||||||
eventWriter.flush();
|
eventWriter.flush();
|
||||||
} catch (XMLStreamException e) {
|
} catch (XMLStreamException e) {
|
||||||
throw new ConfigurationException("Failed to initialize STaX event factory", e);
|
throw new ConfigurationException("Failed to initialize STaX event factory", e);
|
||||||
|
@ -323,6 +324,15 @@ public class XmlParser extends BaseParser implements IParser {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case CONTAINED_RESOURCES: {
|
||||||
|
ContainedDt value = (ContainedDt) nextValue;
|
||||||
|
theEventWriter.writeStartElement("contained");
|
||||||
|
for (IResource next : value.getContainedResources()) {
|
||||||
|
encodeResourceToXmlStreamWriter(next, theEventWriter, true);
|
||||||
|
}
|
||||||
|
theEventWriter.writeEndElement();
|
||||||
|
break;
|
||||||
|
}
|
||||||
case RESOURCE: {
|
case RESOURCE: {
|
||||||
throw new IllegalStateException(); // should not happen
|
throw new IllegalStateException(); // should not happen
|
||||||
}
|
}
|
||||||
|
@ -333,8 +343,9 @@ public class XmlParser extends BaseParser implements IParser {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case EXTENSION_DECLARED:
|
||||||
case UNDECL_EXT: {
|
case UNDECL_EXT: {
|
||||||
throw new IllegalStateException("should not happen");
|
throw new IllegalStateException("state should not happen: " + childDef.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -405,7 +416,7 @@ public class XmlParser extends BaseParser implements IParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void encodeResourceToXmlStreamWriter(IResource theResource, XMLStreamWriter eventWriter) throws XMLStreamException, DataFormatException {
|
private void encodeResourceToXmlStreamWriter(IResource theResource, XMLStreamWriter theEventWriter, boolean theIncludeResourceId) throws XMLStreamException, DataFormatException {
|
||||||
super.containResourcesForEncoding(theResource);
|
super.containResourcesForEncoding(theResource);
|
||||||
|
|
||||||
RuntimeResourceDefinition resDef = myContext.getResourceDefinition(theResource);
|
RuntimeResourceDefinition resDef = myContext.getResourceDefinition(theResource);
|
||||||
|
@ -413,12 +424,16 @@ public class XmlParser extends BaseParser implements IParser {
|
||||||
throw new ConfigurationException("Unknown resource type: " + theResource.getClass());
|
throw new ConfigurationException("Unknown resource type: " + theResource.getClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
eventWriter.writeStartElement(resDef.getName());
|
theEventWriter.writeStartElement(resDef.getName());
|
||||||
eventWriter.writeDefaultNamespace(FHIR_NS);
|
theEventWriter.writeDefaultNamespace(FHIR_NS);
|
||||||
|
|
||||||
encodeCompositeElementToStreamWriter(theResource, eventWriter, resDef);
|
if (theIncludeResourceId && StringUtils.isNotBlank(theResource.getId().getValue())) {
|
||||||
|
theEventWriter.writeAttribute("id", theResource.getId().getValue());
|
||||||
|
}
|
||||||
|
|
||||||
eventWriter.writeEndElement();
|
encodeCompositeElementToStreamWriter(theResource, theEventWriter, resDef);
|
||||||
|
|
||||||
|
theEventWriter.writeEndElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void encodeUndeclaredExtensions(XMLStreamWriter theWriter, List<UndeclaredExtension> extensions, String tagName) throws XMLStreamException {
|
private void encodeUndeclaredExtensions(XMLStreamWriter theWriter, List<UndeclaredExtension> extensions, String tagName) throws XMLStreamException {
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package ca.uhn.fhir.rest.param;
|
package ca.uhn.fhir.rest.param;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ca.uhn.fhir.model.api.IQueryParameterOr;
|
import ca.uhn.fhir.model.api.IQueryParameterOr;
|
||||||
import ca.uhn.fhir.model.dstu.composite.CodingDt;
|
import ca.uhn.fhir.model.dstu.composite.CodingDt;
|
||||||
|
|
||||||
public class CodingListParam implements IQueryParameterOr {
|
public class CodingListParam implements IQueryParameterOr, Iterable<CodingDt> {
|
||||||
|
|
||||||
private List<CodingDt> myCodings = new ArrayList<CodingDt>();
|
private List<CodingDt> myCodings = new ArrayList<CodingDt>();
|
||||||
|
|
||||||
|
@ -14,6 +15,9 @@ public class CodingListParam implements IQueryParameterOr {
|
||||||
* Returns all Codings associated with this list
|
* Returns all Codings associated with this list
|
||||||
*/
|
*/
|
||||||
public List<CodingDt> getCodings() {
|
public List<CodingDt> getCodings() {
|
||||||
|
if (myCodings == null) {
|
||||||
|
myCodings = new ArrayList<CodingDt>();
|
||||||
|
}
|
||||||
return myCodings;
|
return myCodings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +39,7 @@ public class CodingListParam implements IQueryParameterOr {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValuesAsQueryTokens(List<String> theParameters) {
|
public void setValuesAsQueryTokens(List<String> theParameters) {
|
||||||
|
getCodings().clear();
|
||||||
for (String string : theParameters) {
|
for (String string : theParameters) {
|
||||||
CodingDt dt = new CodingDt();
|
CodingDt dt = new CodingDt();
|
||||||
dt.setValueAsQueryToken(string);
|
dt.setValueAsQueryToken(string);
|
||||||
|
@ -46,4 +51,9 @@ public class CodingListParam implements IQueryParameterOr {
|
||||||
myCodings.add(theCodingDt);
|
myCodings.add(theCodingDt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<CodingDt> iterator() {
|
||||||
|
return getCodings().iterator();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
package ca.uhn.fhir.rest.param;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.model.api.IQueryParameterAnd;
|
||||||
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
|
|
||||||
|
public class DateRangeParam implements IQueryParameterAnd {
|
||||||
|
|
||||||
|
private QualifiedDateParam myLowerBound;
|
||||||
|
private QualifiedDateParam myUpperBound;
|
||||||
|
|
||||||
|
private void addParam(QualifiedDateParam theParsed) throws InvalidRequestException {
|
||||||
|
if (theParsed.getComparator() == null) {
|
||||||
|
if (myLowerBound != null || myUpperBound != null) {
|
||||||
|
throw new InvalidRequestException("Can not have multiple date range parameters for the same param without a qualifier");
|
||||||
|
}
|
||||||
|
|
||||||
|
myLowerBound = theParsed;
|
||||||
|
myUpperBound = theParsed;
|
||||||
|
// TODO: in this case, should set lower and upper to exact moments using specified precision
|
||||||
|
} else {
|
||||||
|
|
||||||
|
switch (theParsed.getComparator()) {
|
||||||
|
case GREATERTHAN:
|
||||||
|
case GREATERTHAN_OR_EQUALS:
|
||||||
|
if (myLowerBound != null) {
|
||||||
|
throw new InvalidRequestException("Can not have multiple date range parameters for the same param that specify a lower bound");
|
||||||
|
}
|
||||||
|
myLowerBound = theParsed;
|
||||||
|
break;
|
||||||
|
case LESSTHAN:
|
||||||
|
case LESSTHAN_OR_EQUALS:
|
||||||
|
if (myUpperBound != null) {
|
||||||
|
throw new InvalidRequestException("Can not have multiple date range parameters for the same param that specify an upper bound");
|
||||||
|
}
|
||||||
|
myUpperBound = theParsed;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new InvalidRequestException("Unknown comparator: " + theParsed.getComparator());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public QualifiedDateParam getLowerBound() {
|
||||||
|
return myLowerBound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public QualifiedDateParam getUpperBound() {
|
||||||
|
return myUpperBound;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<List<String>> getValuesAsQueryTokens() {
|
||||||
|
ArrayList<List<String>> retVal = new ArrayList<List<String>>();
|
||||||
|
if (myLowerBound != null) {
|
||||||
|
retVal.add(Collections.singletonList(myLowerBound.getValueAsQueryToken()));
|
||||||
|
}
|
||||||
|
if (myUpperBound != null) {
|
||||||
|
retVal.add(Collections.singletonList(myUpperBound.getValueAsQueryToken()));
|
||||||
|
}
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLowerBound(QualifiedDateParam theLowerBound) {
|
||||||
|
myLowerBound = theLowerBound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpperBound(QualifiedDateParam theUpperBound) {
|
||||||
|
myUpperBound = theUpperBound;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValuesAsQueryTokens(List<List<String>> theParameters) throws InvalidRequestException {
|
||||||
|
for (List<String> paramList : theParameters) {
|
||||||
|
if (paramList.size() == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (paramList.size() > 1) {
|
||||||
|
throw new InvalidRequestException("DateRange parameter does not suppport OR queries");
|
||||||
|
}
|
||||||
|
String param = paramList.get(0);
|
||||||
|
QualifiedDateParam parsed = new QualifiedDateParam();
|
||||||
|
parsed.setValueAsQueryToken(param);
|
||||||
|
addParam(parsed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getLowerBoundAsInstant() {
|
||||||
|
// TODO: account for precision
|
||||||
|
return myLowerBound.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getUpperBoundAsInstant() {
|
||||||
|
// TODO: account for precision
|
||||||
|
return myUpperBound.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package ca.uhn.fhir.rest.param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.model.api.IQueryParameterAnd;
|
||||||
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
|
|
||||||
|
final class QueryParameterAndBinder implements IParamBinder {
|
||||||
|
private final Class<? extends IQueryParameterAnd> myType;
|
||||||
|
|
||||||
|
QueryParameterAndBinder(Class<? extends IQueryParameterAnd> theType) {
|
||||||
|
myType = theType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<List<String>> encode(Object theString) throws InternalErrorException {
|
||||||
|
List<List<String>> retVal = ((IQueryParameterAnd) theString).getValuesAsQueryTokens();
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object parse(List<List<String>> theString) throws InternalErrorException, InvalidRequestException {
|
||||||
|
IQueryParameterAnd dt;
|
||||||
|
try {
|
||||||
|
dt = myType.newInstance();
|
||||||
|
dt.setValuesAsQueryTokens(theString);
|
||||||
|
} catch (InstantiationException e) {
|
||||||
|
throw new InternalErrorException(e);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new InternalErrorException(e);
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
throw new InternalErrorException(e);
|
||||||
|
}
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.ConfigurationException;
|
import ca.uhn.fhir.context.ConfigurationException;
|
||||||
|
import ca.uhn.fhir.model.api.IQueryParameterAnd;
|
||||||
import ca.uhn.fhir.model.api.IQueryParameterOr;
|
import ca.uhn.fhir.model.api.IQueryParameterOr;
|
||||||
import ca.uhn.fhir.model.api.IQueryParameterType;
|
import ca.uhn.fhir.model.api.IQueryParameterType;
|
||||||
import ca.uhn.fhir.model.dstu.composite.IdentifierDt;
|
import ca.uhn.fhir.model.dstu.composite.IdentifierDt;
|
||||||
|
@ -79,6 +80,8 @@ public class SearchParameter implements IParameter {
|
||||||
this.parser = new QueryParameterTypeBinder((Class<? extends IQueryParameterType>) type);
|
this.parser = new QueryParameterTypeBinder((Class<? extends IQueryParameterType>) type);
|
||||||
} else if (IQueryParameterOr.class.isAssignableFrom(type)) {
|
} else if (IQueryParameterOr.class.isAssignableFrom(type)) {
|
||||||
this.parser = new QueryParameterOrBinder((Class<? extends IQueryParameterOr>) type);
|
this.parser = new QueryParameterOrBinder((Class<? extends IQueryParameterOr>) type);
|
||||||
|
} else if (IQueryParameterAnd.class.isAssignableFrom(type)) {
|
||||||
|
this.parser = new QueryParameterAndBinder((Class<? extends IQueryParameterAnd>) type);
|
||||||
} else {
|
} else {
|
||||||
throw new ConfigurationException("Unsupported data type for parameter: " + type.getCanonicalName());
|
throw new ConfigurationException("Unsupported data type for parameter: " + type.getCanonicalName());
|
||||||
}
|
}
|
||||||
|
@ -87,6 +90,8 @@ public class SearchParameter implements IParameter {
|
||||||
myParamType = SearchParamTypeEnum.STRING;
|
myParamType = SearchParamTypeEnum.STRING;
|
||||||
} else if (QualifiedDateParam.class.isAssignableFrom(type)) {
|
} else if (QualifiedDateParam.class.isAssignableFrom(type)) {
|
||||||
myParamType = SearchParamTypeEnum.DATE;
|
myParamType = SearchParamTypeEnum.DATE;
|
||||||
|
} else if (DateRangeParam.class.isAssignableFrom(type)) {
|
||||||
|
myParamType = SearchParamTypeEnum.DATE;
|
||||||
} else if (CodingListParam.class.isAssignableFrom(type)) {
|
} else if (CodingListParam.class.isAssignableFrom(type)) {
|
||||||
myParamType = SearchParamTypeEnum.TOKEN;
|
myParamType = SearchParamTypeEnum.TOKEN;
|
||||||
} else if (IdentifierDt.class.isAssignableFrom(type)) {
|
} else if (IdentifierDt.class.isAssignableFrom(type)) {
|
||||||
|
|
|
@ -186,6 +186,19 @@ public abstract class RestfulServer extends HttpServlet {
|
||||||
String requestFullPath = StringUtils.defaultString(request.getRequestURI());
|
String requestFullPath = StringUtils.defaultString(request.getRequestURI());
|
||||||
// String contextPath = StringUtils.defaultString(request.getContextPath());
|
// String contextPath = StringUtils.defaultString(request.getContextPath());
|
||||||
String servletPath = StringUtils.defaultString(request.getServletPath());
|
String servletPath = StringUtils.defaultString(request.getServletPath());
|
||||||
|
StringBuffer requestUrl = request.getRequestURL();
|
||||||
|
String servletContextPath = "";
|
||||||
|
if (request.getServletContext() != null) {
|
||||||
|
servletContextPath = StringUtils.defaultString(request.getServletContext().getContextPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
ourLog.info("Request FullPath: {}", requestFullPath);
|
||||||
|
ourLog.info("Servlet Path: {}", servletPath);
|
||||||
|
ourLog.info("Request Url: {}", requestUrl);
|
||||||
|
ourLog.info("Context Path: {}", servletContextPath);
|
||||||
|
|
||||||
|
servletPath = servletContextPath;
|
||||||
|
|
||||||
IdDt id = null;
|
IdDt id = null;
|
||||||
IdDt versionId = null;
|
IdDt versionId = null;
|
||||||
String operation = null;
|
String operation = null;
|
||||||
|
@ -195,13 +208,10 @@ public abstract class RestfulServer extends HttpServlet {
|
||||||
requestPath = requestPath.substring(1);
|
requestPath = requestPath.substring(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuffer requestUrl = request.getRequestURL();
|
|
||||||
int contextIndex = requestUrl.indexOf(servletPath);
|
int contextIndex = requestUrl.indexOf(servletPath);
|
||||||
String fhirServerBase = requestUrl.substring(0, contextIndex + servletPath.length());
|
String fhirServerBase = requestUrl.substring(0, contextIndex + servletPath.length());
|
||||||
String completeUrl = StringUtils.isNotBlank(request.getQueryString()) ? requestUrl + "?" + request.getQueryString() : requestUrl.toString();
|
String completeUrl = StringUtils.isNotBlank(request.getQueryString()) ? requestUrl + "?" + request.getQueryString() : requestUrl.toString();
|
||||||
|
|
||||||
ourLog.info("Request URI: {}", requestPath);
|
|
||||||
|
|
||||||
Map<String, String[]> params = new HashMap<String, String[]>(request.getParameterMap());
|
Map<String, String[]> params = new HashMap<String, String[]>(request.getParameterMap());
|
||||||
EncodingUtil responseEncoding = determineResponseEncoding(request, params);
|
EncodingUtil responseEncoding = determineResponseEncoding(request, params);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package ca.uhn.fhir.rest.server.exceptions;
|
package ca.uhn.fhir.rest.server.exceptions;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.model.api.IResource;
|
||||||
|
import ca.uhn.fhir.model.dstu.composite.IdentifierDt;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
import ca.uhn.fhir.model.primitive.IdDt;
|
||||||
|
|
||||||
public class ResourceNotFoundException extends BaseServerResponseException {
|
public class ResourceNotFoundException extends BaseServerResponseException {
|
||||||
|
@ -8,6 +10,10 @@ public class ResourceNotFoundException extends BaseServerResponseException {
|
||||||
super(404, "Resource " + (theId != null ? theId.getValue() : "") + " is not known");
|
super(404, "Resource " + (theId != null ? theId.getValue() : "") + " is not known");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ResourceNotFoundException(Class<? extends IResource> theClass, IdentifierDt thePatientId) {
|
||||||
|
super(404, "Resource of type " + theClass.getSimpleName() + " with ID " + thePatientId + " is not known");
|
||||||
|
}
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ import net.sf.json.JSON;
|
||||||
import net.sf.json.JSONSerializer;
|
import net.sf.json.JSONSerializer;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.hamcrest.core.IsNot;
|
||||||
|
import org.hamcrest.core.StringContains;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
|
@ -19,6 +21,8 @@ import ca.uhn.fhir.model.api.UndeclaredExtension;
|
||||||
import ca.uhn.fhir.model.dstu.resource.DiagnosticReport;
|
import ca.uhn.fhir.model.dstu.resource.DiagnosticReport;
|
||||||
import ca.uhn.fhir.model.dstu.resource.Observation;
|
import ca.uhn.fhir.model.dstu.resource.Observation;
|
||||||
import ca.uhn.fhir.model.dstu.resource.Patient;
|
import ca.uhn.fhir.model.dstu.resource.Patient;
|
||||||
|
import ca.uhn.fhir.model.dstu.resource.Specimen;
|
||||||
|
import ca.uhn.fhir.model.primitive.DecimalDt;
|
||||||
|
|
||||||
public class JsonParserTest {
|
public class JsonParserTest {
|
||||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(JsonParserTest.class);
|
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(JsonParserTest.class);
|
||||||
|
@ -88,5 +92,39 @@ public class JsonParserTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEncodeContainedResourcesMore() throws IOException {
|
||||||
|
|
||||||
|
DiagnosticReport rpt = new DiagnosticReport();
|
||||||
|
Specimen spm = new Specimen();
|
||||||
|
spm.getText().setDiv("AAA");
|
||||||
|
rpt.addSpecimen().setResource(spm);
|
||||||
|
|
||||||
|
IParser p = new FhirContext(DiagnosticReport.class).newJsonParser().setPrettyPrint(true);
|
||||||
|
String str = p.encodeResourceToString(rpt);
|
||||||
|
|
||||||
|
ourLog.info(str);
|
||||||
|
assertThat(str, StringContains.containsString("<div>AAA</div>"));
|
||||||
|
String substring = "\"resource\":\"#";
|
||||||
|
assertThat(str, StringContains.containsString(substring));
|
||||||
|
|
||||||
|
int idx = str.indexOf(substring) + substring.length();
|
||||||
|
int idx2 = str.indexOf('"', idx+1);
|
||||||
|
String id = str.substring(idx, idx2);
|
||||||
|
assertThat(str, StringContains.containsString("\"id\":\"" + id + "\""));
|
||||||
|
assertThat(str, IsNot.not(StringContains.containsString("<?xml version='1.0'?>")));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEncodeInvalidChildGoodException() throws IOException {
|
||||||
|
Observation obs = new Observation();
|
||||||
|
obs.setValue(new DecimalDt(112.22));
|
||||||
|
|
||||||
|
IParser p = new FhirContext(Observation.class).newXmlParser();
|
||||||
|
|
||||||
|
// Should have good error message
|
||||||
|
p.encodeResourceToString(obs);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ import java.io.StringReader;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.custommonkey.xmlunit.Diff;
|
import org.custommonkey.xmlunit.Diff;
|
||||||
import org.custommonkey.xmlunit.XMLUnit;
|
import org.custommonkey.xmlunit.XMLUnit;
|
||||||
|
import org.hamcrest.core.IsNot;
|
||||||
|
import org.hamcrest.core.StringContains;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
@ -18,12 +20,15 @@ import ca.uhn.fhir.context.ResourceWithExtensionsA;
|
||||||
import ca.uhn.fhir.model.api.Bundle;
|
import ca.uhn.fhir.model.api.Bundle;
|
||||||
import ca.uhn.fhir.model.api.BundleEntry;
|
import ca.uhn.fhir.model.api.BundleEntry;
|
||||||
import ca.uhn.fhir.model.api.IResource;
|
import ca.uhn.fhir.model.api.IResource;
|
||||||
|
import ca.uhn.fhir.model.dstu.composite.NarrativeDt;
|
||||||
import ca.uhn.fhir.model.dstu.composite.ResourceReferenceDt;
|
import ca.uhn.fhir.model.dstu.composite.ResourceReferenceDt;
|
||||||
import ca.uhn.fhir.model.dstu.resource.DiagnosticReport;
|
import ca.uhn.fhir.model.dstu.resource.DiagnosticReport;
|
||||||
import ca.uhn.fhir.model.dstu.resource.Observation;
|
import ca.uhn.fhir.model.dstu.resource.Observation;
|
||||||
import ca.uhn.fhir.model.dstu.resource.Patient;
|
import ca.uhn.fhir.model.dstu.resource.Patient;
|
||||||
|
import ca.uhn.fhir.model.dstu.resource.Specimen;
|
||||||
import ca.uhn.fhir.model.dstu.resource.ValueSet;
|
import ca.uhn.fhir.model.dstu.resource.ValueSet;
|
||||||
import ca.uhn.fhir.model.dstu.valueset.NarrativeStatusEnum;
|
import ca.uhn.fhir.model.dstu.valueset.NarrativeStatusEnum;
|
||||||
|
import ca.uhn.fhir.model.primitive.DecimalDt;
|
||||||
|
|
||||||
public class XmlParserTest {
|
public class XmlParserTest {
|
||||||
|
|
||||||
|
@ -54,6 +59,41 @@ public class XmlParserTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEncodeInvalidChildGoodException() throws IOException {
|
||||||
|
Observation obs = new Observation();
|
||||||
|
obs.setValue(new DecimalDt(112.22));
|
||||||
|
|
||||||
|
IParser p = new FhirContext(Observation.class).newXmlParser();
|
||||||
|
|
||||||
|
// Should have good error message
|
||||||
|
p.encodeResourceToString(obs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEncodeContainedResources() throws IOException {
|
||||||
|
|
||||||
|
DiagnosticReport rpt = new DiagnosticReport();
|
||||||
|
Specimen spm = new Specimen();
|
||||||
|
spm.getText().setDiv("AAA");
|
||||||
|
rpt.addSpecimen().setResource(spm);
|
||||||
|
|
||||||
|
IParser p = new FhirContext(DiagnosticReport.class).newXmlParser().setPrettyPrint(true);
|
||||||
|
String str = p.encodeResourceToString(rpt);
|
||||||
|
|
||||||
|
ourLog.info(str);
|
||||||
|
assertThat(str, StringContains.containsString("<div>AAA</div>"));
|
||||||
|
assertThat(str, StringContains.containsString("reference value=\"#"));
|
||||||
|
|
||||||
|
int idx = str.indexOf("reference value=\"#") + "reference value=\"#".length();
|
||||||
|
int idx2 = str.indexOf('"', idx+1);
|
||||||
|
String id = str.substring(idx, idx2);
|
||||||
|
assertThat(str, StringContains.containsString("<Specimen xmlns=\"http://hl7.org/fhir\" id=\"" + id + "\">"));
|
||||||
|
assertThat(str, IsNot.not(StringContains.containsString("<?xml version='1.0'?>")));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testParseBundle() {
|
public void testParseBundle() {
|
||||||
|
|
|
@ -32,6 +32,7 @@ import ca.uhn.fhir.model.dstu.valueset.QuantityCompararatorEnum;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
import ca.uhn.fhir.model.primitive.IdDt;
|
||||||
import ca.uhn.fhir.model.primitive.StringDt;
|
import ca.uhn.fhir.model.primitive.StringDt;
|
||||||
import ca.uhn.fhir.rest.param.CodingListParam;
|
import ca.uhn.fhir.rest.param.CodingListParam;
|
||||||
|
import ca.uhn.fhir.rest.param.DateRangeParam;
|
||||||
import ca.uhn.fhir.rest.param.QualifiedDateParam;
|
import ca.uhn.fhir.rest.param.QualifiedDateParam;
|
||||||
import ca.uhn.fhir.rest.server.Constants;
|
import ca.uhn.fhir.rest.server.Constants;
|
||||||
|
|
||||||
|
@ -134,6 +135,32 @@ public class ClientTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSearchByDateRange() throws Exception {
|
||||||
|
|
||||||
|
String msg = getPatientFeedWithOneResult();
|
||||||
|
|
||||||
|
ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
|
||||||
|
when(httpClient.execute(capt.capture())).thenReturn(httpResponse);
|
||||||
|
when(httpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
|
||||||
|
when(httpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
|
||||||
|
when(httpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
|
||||||
|
|
||||||
|
ITestClient client = clientFactory.newClient(ITestClient.class, "http://foo");
|
||||||
|
DateRangeParam param = new DateRangeParam();
|
||||||
|
param.setLowerBound(new QualifiedDateParam(QuantityCompararatorEnum.GREATERTHAN_OR_EQUALS, "2011-01-01"));
|
||||||
|
param.setUpperBound(new QualifiedDateParam(QuantityCompararatorEnum.LESSTHAN_OR_EQUALS, "2021-01-01"));
|
||||||
|
List<Patient> response = client.getPatientByDateRange(param);
|
||||||
|
|
||||||
|
assertEquals("http://foo/Patient?dateRange=%3E%3D2011-01-01&dateRange=%3C%3D2021-01-01", capt.getValue().getURI().toString());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSearchByDob() throws Exception {
|
public void testSearchByDob() throws Exception {
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ import ca.uhn.fhir.rest.annotation.Required;
|
||||||
import ca.uhn.fhir.rest.annotation.Search;
|
import ca.uhn.fhir.rest.annotation.Search;
|
||||||
import ca.uhn.fhir.rest.client.api.IBasicClient;
|
import ca.uhn.fhir.rest.client.api.IBasicClient;
|
||||||
import ca.uhn.fhir.rest.param.CodingListParam;
|
import ca.uhn.fhir.rest.param.CodingListParam;
|
||||||
|
import ca.uhn.fhir.rest.param.DateRangeParam;
|
||||||
import ca.uhn.fhir.rest.param.QualifiedDateParam;
|
import ca.uhn.fhir.rest.param.QualifiedDateParam;
|
||||||
|
|
||||||
public interface ITestClient extends IBasicClient {
|
public interface ITestClient extends IBasicClient {
|
||||||
|
@ -34,6 +35,9 @@ public interface ITestClient extends IBasicClient {
|
||||||
@Search()
|
@Search()
|
||||||
public List<Patient> getPatientMultipleIdentifiers(@Required(name = "ids") CodingListParam theIdentifiers);
|
public List<Patient> getPatientMultipleIdentifiers(@Required(name = "ids") CodingListParam theIdentifiers);
|
||||||
|
|
||||||
|
@Search()
|
||||||
|
public List<Patient> getPatientByDateRange(@Required(name = "dateRange") DateRangeParam theIdentifiers);
|
||||||
|
|
||||||
@Search()
|
@Search()
|
||||||
public List<Patient> getPatientByDob(@Required(name=Patient.SP_BIRTHDATE) QualifiedDateParam theBirthDate);
|
public List<Patient> getPatientByDob(@Required(name=Patient.SP_BIRTHDATE) QualifiedDateParam theBirthDate);
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import java.io.OutputStreamWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -25,6 +26,7 @@ import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.junit.experimental.theories.Theories;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.api.Bundle;
|
import ca.uhn.fhir.model.api.Bundle;
|
||||||
|
@ -33,6 +35,7 @@ import ca.uhn.fhir.model.dstu.composite.CodingDt;
|
||||||
import ca.uhn.fhir.model.dstu.composite.HumanNameDt;
|
import ca.uhn.fhir.model.dstu.composite.HumanNameDt;
|
||||||
import ca.uhn.fhir.model.dstu.composite.IdentifierDt;
|
import ca.uhn.fhir.model.dstu.composite.IdentifierDt;
|
||||||
import ca.uhn.fhir.model.dstu.resource.Conformance;
|
import ca.uhn.fhir.model.dstu.resource.Conformance;
|
||||||
|
import ca.uhn.fhir.model.dstu.resource.DiagnosticReport;
|
||||||
import ca.uhn.fhir.model.dstu.resource.Patient;
|
import ca.uhn.fhir.model.dstu.resource.Patient;
|
||||||
import ca.uhn.fhir.model.dstu.valueset.IdentifierUseEnum;
|
import ca.uhn.fhir.model.dstu.valueset.IdentifierUseEnum;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
import ca.uhn.fhir.model.primitive.IdDt;
|
||||||
|
@ -45,6 +48,7 @@ import ca.uhn.fhir.rest.annotation.Read;
|
||||||
import ca.uhn.fhir.rest.annotation.Required;
|
import ca.uhn.fhir.rest.annotation.Required;
|
||||||
import ca.uhn.fhir.rest.annotation.Search;
|
import ca.uhn.fhir.rest.annotation.Search;
|
||||||
import ca.uhn.fhir.rest.param.CodingListParam;
|
import ca.uhn.fhir.rest.param.CodingListParam;
|
||||||
|
import ca.uhn.fhir.rest.param.DateRangeParam;
|
||||||
import ca.uhn.fhir.rest.param.QualifiedDateParam;
|
import ca.uhn.fhir.rest.param.QualifiedDateParam;
|
||||||
import ca.uhn.fhir.rest.server.provider.ServerProfileProvider;
|
import ca.uhn.fhir.rest.server.provider.ServerProfileProvider;
|
||||||
import ca.uhn.fhir.testutil.RandomServerPortProvider;
|
import ca.uhn.fhir.testutil.RandomServerPortProvider;
|
||||||
|
@ -142,16 +146,16 @@ public class ResfulServerMethodTest {
|
||||||
ourLog.info("Response:\n{}", enc);
|
ourLog.info("Response:\n{}", enc);
|
||||||
assertTrue(enc.contains(ExtensionConstants.CONF_ALSO_CHAIN));
|
assertTrue(enc.contains(ExtensionConstants.CONF_ALSO_CHAIN));
|
||||||
}
|
}
|
||||||
// {
|
// {
|
||||||
// IParser p = ourCtx.newJsonParser().setPrettyPrint(true);
|
// IParser p = ourCtx.newJsonParser().setPrettyPrint(true);
|
||||||
//
|
//
|
||||||
// p.encodeResourceToWriter(bundle, new OutputStreamWriter(System.out));
|
// p.encodeResourceToWriter(bundle, new OutputStreamWriter(System.out));
|
||||||
//
|
//
|
||||||
// String enc = p.encodeResourceToString(bundle);
|
// String enc = p.encodeResourceToString(bundle);
|
||||||
// ourLog.info("Response:\n{}", enc);
|
// ourLog.info("Response:\n{}", enc);
|
||||||
// assertTrue(enc.contains(ExtensionConstants.CONF_ALSO_CHAIN));
|
// assertTrue(enc.contains(ExtensionConstants.CONF_ALSO_CHAIN));
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -212,6 +216,18 @@ public class ResfulServerMethodTest {
|
||||||
assertEquals("urn:bbb|bbb", patient.getIdentifier().get(2).getValueAsQueryToken());
|
assertEquals("urn:bbb|bbb", patient.getIdentifier().get(2).getValueAsQueryToken());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Test
|
||||||
|
// public void testSearchByComplex() throws Exception {
|
||||||
|
//
|
||||||
|
// HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?Patient.identifier=urn:oid:2.16.840.1.113883.3.239.18.148%7C7000135&name=urn:oid:1.3.6.1.4.1.12201.102.5%7C522&date=");
|
||||||
|
// HttpResponse status = ourClient.execute(httpGet);
|
||||||
|
//
|
||||||
|
// String responseContent = IOUtils.toString(status.getEntity().getContent());
|
||||||
|
// ourLog.info("Response was:\n{}", responseContent);
|
||||||
|
//
|
||||||
|
// assertEquals(200, status.getStatusLine().getStatusCode());
|
||||||
|
// }
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSearchByDob() throws Exception {
|
public void testSearchByDob() throws Exception {
|
||||||
|
|
||||||
|
@ -361,11 +377,30 @@ public class ResfulServerMethodTest {
|
||||||
|
|
||||||
assertEquals(200, status.getStatusLine().getStatusCode());
|
assertEquals(200, status.getStatusLine().getStatusCode());
|
||||||
|
|
||||||
// TODO: enable once JSON parser is written
|
Patient patient = (Patient) ourCtx.newJsonParser().parseResource(responseContent);
|
||||||
// Patient patient = (Patient)
|
assertEquals("PatientOne", patient.getName().get(0).getGiven().get(0).getValue());
|
||||||
// ourCtx.newJsonParser().parseResource(responseContent);
|
|
||||||
// assertEquals("PatientOne",
|
}
|
||||||
// patient.getName().get(0).getGiven().get(0).getValue());
|
|
||||||
|
@Test
|
||||||
|
public void testDateRangeParam() throws Exception {
|
||||||
|
|
||||||
|
// HttpPost httpPost = new HttpPost("http://localhost:" + ourPort +
|
||||||
|
// "/Patient/1");
|
||||||
|
// httpPost.setEntity(new StringEntity("test",
|
||||||
|
// ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
|
||||||
|
|
||||||
|
HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?dateRange=%3E%3D2011-01-01&dateRange=%3C%3D2021-01-01");
|
||||||
|
HttpResponse status = ourClient.execute(httpGet);
|
||||||
|
|
||||||
|
String responseContent = IOUtils.toString(status.getEntity().getContent());
|
||||||
|
ourLog.info("Response was:\n{}", responseContent);
|
||||||
|
|
||||||
|
assertEquals(200, status.getStatusLine().getStatusCode());
|
||||||
|
|
||||||
|
Patient patient = (Patient) ourCtx.newXmlParser().parseBundle(responseContent).getEntries().get(0).getResource();
|
||||||
|
assertEquals(">=2011-01-01", patient.getName().get(0).getSuffix().get(0).getValue());
|
||||||
|
assertEquals("<=2021-01-01", patient.getName().get(0).getSuffix().get(1).getValue());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -517,6 +552,15 @@ public class ResfulServerMethodTest {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public List<Patient> findDiagnosticReportsByPatient(
|
||||||
|
@Required(name="Patient.identifier") IdentifierDt thePatientId,
|
||||||
|
@Required(name=DiagnosticReport.SP_NAME) CodingListParam theNames,
|
||||||
|
@Optional(name=DiagnosticReport.SP_DATE) DateRangeParam theDateRange
|
||||||
|
) throws Exception {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
@Search()
|
@Search()
|
||||||
public Patient getPatientWithDOB(@Required(name = "dob") QualifiedDateParam theDob) {
|
public Patient getPatientWithDOB(@Required(name = "dob") QualifiedDateParam theDob) {
|
||||||
Patient next = getIdToPatient().get("1");
|
Patient next = getIdToPatient().get("1");
|
||||||
|
@ -601,6 +645,14 @@ public class ResfulServerMethodTest {
|
||||||
return Patient.class;
|
return Patient.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Search()
|
||||||
|
public Patient getPatientByDateRange(@Required(name = "dateRange") DateRangeParam theIdentifiers) {
|
||||||
|
Patient retVal = getIdToPatient().get("1");
|
||||||
|
retVal.getName().get(0).addSuffix().setValue(theIdentifiers.getLowerBound().getValueAsQueryToken());
|
||||||
|
retVal.getName().get(0).addSuffix().setValue(theIdentifiers.getUpperBound().getValueAsQueryToken());
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,21 @@
|
||||||
return newType;
|
return newType;
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
#if( ${child.repeatable} && ${child.singleChildInstantiable} && ${child.resourceRef} )
|
||||||
|
/**
|
||||||
|
* Adds and returns a new value for <b>${child.elementName}</b> (${child.shortName})
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* <b>Definition:</b>
|
||||||
|
* ${child.definition}
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public ResourceReferenceDt add${child.methodName}() {
|
||||||
|
ResourceReferenceDt newType = new ResourceReferenceDt();
|
||||||
|
get${child.methodName}().add(newType);
|
||||||
|
return newType;
|
||||||
|
}
|
||||||
|
#end
|
||||||
#if ( ${child.boundCode} && ${child.repeatable} )
|
#if ( ${child.boundCode} && ${child.repeatable} )
|
||||||
/**
|
/**
|
||||||
* Add a value for <b>${child.elementName}</b> (${child.shortName})
|
* Add a value for <b>${child.elementName}</b> (${child.shortName})
|
||||||
|
|
Loading…
Reference in New Issue