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

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

package dev.dsf.fhir.dao.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.sql.DataSource;

import org.hl7.fhir.r4.model.Subscription;

import ca.uhn.fhir.context.FhirContext;
import dev.dsf.fhir.dao.SubscriptionDao;
import dev.dsf.fhir.search.filter.SubscriptionIdentityFilter;
import dev.dsf.fhir.search.parameters.SubscriptionCriteria;
import dev.dsf.fhir.search.parameters.SubscriptionPayload;
import dev.dsf.fhir.search.parameters.SubscriptionStatus;
import dev.dsf.fhir.search.parameters.SubscriptionType;

public class SubscriptionDaoJdbc extends AbstractResourceDaoJdbc implements SubscriptionDao
{
	public SubscriptionDaoJdbc(DataSource dataSource, DataSource permanentDeleteDataSource, FhirContext fhirContext)
	{
		super(dataSource, permanentDeleteDataSource, fhirContext, Subscription.class, "subscriptions", "subscription",
				"subscription_id", SubscriptionIdentityFilter::new,
				List.of(factory(SubscriptionCriteria.PARAMETER_NAME, SubscriptionCriteria::new,
						SubscriptionCriteria.getNameModifiers()),
						factory(SubscriptionPayload.PARAMETER_NAME, SubscriptionPayload::new,
								SubscriptionPayload.getNameModifiers()),
						factory(SubscriptionStatus.PARAMETER_NAME, SubscriptionStatus::new,
								SubscriptionStatus.getNameModifiers()),
						factory(SubscriptionType.PARAMETER_NAME, SubscriptionType::new,
								SubscriptionType.getNameModifiers())),
				List.of());
	}

	@Override
	protected Subscription copy(Subscription resource)
	{
		return resource.copy();
	}

	@Override
	public List readByStatus(Subscription.SubscriptionStatus status) throws SQLException
	{
		if (status == null)
			return Collections.emptyList();

		try (Connection connection = getDataSource().getConnection();
				PreparedStatement statement = connection.prepareStatement(
						"SELECT subscription FROM current_subscriptions WHERE subscription->>'status' = ?"))
		{
			statement.setString(1, status.toCode());

			try (ResultSet result = statement.executeQuery())
			{
				List all = new ArrayList<>();

				while (result.next())
					all.add(getResource(result, 1));

				return all;
			}
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy