![JAR search and dependency download from the Maven repository](/logo.png)
dev.dsf.fhir.search.parameters.basic.AbstractStatusParameter Maven / Gradle / Ivy
package dev.dsf.fhir.search.parameters.basic;
import java.sql.Array;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.Objects;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r4.model.Enumerations.PublicationStatus;
import org.hl7.fhir.r4.model.MetadataResource;
import dev.dsf.fhir.function.BiFunctionWithSqlException;
import dev.dsf.fhir.search.SearchQueryParameterError;
import dev.dsf.fhir.search.SearchQueryParameterError.SearchQueryParameterErrorType;
public class AbstractStatusParameter extends AbstractTokenParameter
{
public static final String PARAMETER_NAME = "status";
private final String resourceColumn;
private PublicationStatus status;
public AbstractStatusParameter(Class resourceType, String resourceColumn)
{
super(resourceType, PARAMETER_NAME);
this.resourceColumn = resourceColumn;
}
@Override
protected void doConfigure(List super SearchQueryParameterError> errors, String queryParameterName,
String queryParameterValue)
{
super.doConfigure(errors, queryParameterName, queryParameterValue);
if (valueAndType != null && valueAndType.type == TokenSearchType.CODE)
status = toStatus(errors, valueAndType.codeValue, queryParameterValue);
}
private PublicationStatus toStatus(List super SearchQueryParameterError> errors, String status,
String queryParameterValue)
{
if (status == null || status.isBlank())
return null;
try
{
return PublicationStatus.fromCode(status);
}
catch (FHIRException e)
{
errors.add(new SearchQueryParameterError(SearchQueryParameterErrorType.UNPARSABLE_VALUE, parameterName,
queryParameterValue, e));
return null;
}
}
@Override
public boolean isDefined()
{
return super.isDefined() && status != null;
}
@Override
protected String getPositiveFilterQuery()
{
return resourceColumn + "->>'status' = ?";
}
@Override
protected String getNegatedFilterQuery()
{
return resourceColumn + "->>'status' <> ?";
}
@Override
public int getSqlParameterCount()
{
return 1;
}
@Override
public void modifyStatement(int parameterIndex, int subqueryParameterIndex, PreparedStatement statement,
BiFunctionWithSqlException arrayCreator) throws SQLException
{
statement.setString(parameterIndex, status.toCode());
}
@Override
public String getBundleUriQueryParameterValue()
{
return status.toCode();
}
@Override
protected boolean resourceMatches(R resource)
{
return valueAndType.negated ^ Objects.equals(resource.getStatus(), status);
}
@Override
protected String getSortSql(String sortDirectionWithSpacePrefix)
{
return resourceColumn + "->>'status'" + sortDirectionWithSpacePrefix;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy