All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.dsf.fhir.dao.jdbc.AbstractStructureDefinitionDaoJdbc Maven / Gradle / Ivy

package dev.dsf.fhir.dao.jdbc;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;

import javax.sql.DataSource;

import org.hl7.fhir.r4.model.Resource;
import org.hl7.fhir.r4.model.StructureDefinition;

import ca.uhn.fhir.context.FhirContext;
import dev.dsf.common.auth.conf.Identity;
import dev.dsf.fhir.dao.StructureDefinitionDao;
import dev.dsf.fhir.search.SearchQueryIdentityFilter;
import dev.dsf.fhir.search.SearchQueryParameter;
import dev.dsf.fhir.search.SearchQueryParameterFactory;
import dev.dsf.fhir.search.parameters.StructureDefinitionDate;
import dev.dsf.fhir.search.parameters.StructureDefinitionIdentifier;
import dev.dsf.fhir.search.parameters.StructureDefinitionName;
import dev.dsf.fhir.search.parameters.StructureDefinitionStatus;
import dev.dsf.fhir.search.parameters.StructureDefinitionUrl;
import dev.dsf.fhir.search.parameters.StructureDefinitionVersion;

abstract class AbstractStructureDefinitionDaoJdbc extends AbstractResourceDaoJdbc
		implements StructureDefinitionDao
{
	private static  SearchQueryParameterFactory factory(String resourceColumn,
			String parameterName, Function> supplier, List nameModifiers)
	{
		return factory(parameterName, () -> supplier.apply(resourceColumn), nameModifiers);
	}

	private static  SearchQueryParameterFactory factory(String resourceColumn,
			String parameterName, Function> supplier)
	{
		return factory(parameterName, () -> supplier.apply(resourceColumn));
	}

	private final ReadByUrlDaoJdbc readByUrl;

	protected AbstractStructureDefinitionDaoJdbc(DataSource dataSource, DataSource permanentDeleteDataSource,
			FhirContext fhirContext, String resourceTable, String resourceColumn, String resourceIdColumn,
			Function userFilter)
	{
		super(dataSource, permanentDeleteDataSource, fhirContext, StructureDefinition.class, resourceTable,
				resourceColumn, resourceIdColumn, userFilter,
				List.of(factory(resourceColumn, StructureDefinitionDate.PARAMETER_NAME, StructureDefinitionDate::new),
						factory(resourceColumn, StructureDefinitionIdentifier.PARAMETER_NAME,
								StructureDefinitionIdentifier::new, StructureDefinitionIdentifier.getNameModifiers()),
						factory(resourceColumn, StructureDefinitionName.PARAMETER_NAME, StructureDefinitionName::new,
								StructureDefinitionName.getNameModifiers()),
						factory(resourceColumn, StructureDefinitionStatus.PARAMETER_NAME,
								StructureDefinitionStatus::new, StructureDefinitionStatus.getNameModifiers()),
						factory(resourceColumn, StructureDefinitionUrl.PARAMETER_NAME, StructureDefinitionUrl::new,
								StructureDefinitionUrl.getNameModifiers()),
						factory(resourceColumn, StructureDefinitionVersion.PARAMETER_NAME,
								StructureDefinitionVersion::new, StructureDefinitionVersion.getNameModifiers())),
				List.of());

		readByUrl = new ReadByUrlDaoJdbc<>(this::getDataSource, this::getResource, resourceTable, resourceColumn);
	}

	@Override
	public Optional readByUrlAndVersion(String urlAndVersion) throws SQLException
	{
		return readByUrl.readByUrlAndVersion(urlAndVersion);
	}

	@Override
	public Optional readByUrlAndVersionWithTransaction(Connection connection, String urlAndVersion)
			throws SQLException
	{
		return readByUrl.readByUrlAndVersionWithTransaction(connection, urlAndVersion);
	}

	@Override
	public Optional readByUrlAndVersion(String url, String version) throws SQLException
	{
		return readByUrl.readByUrlAndVersion(url, version);
	}

	@Override
	public Optional readByUrlAndVersionWithTransaction(Connection connection, String url,
			String version) throws SQLException
	{
		return readByUrl.readByUrlAndVersionWithTransaction(connection, url, version);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy