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

de.svws_nrw.data.email.DataEmailSMTPServerKonfiguration Maven / Gradle / Ivy

Go to download

Diese Bibliothek unterstützt bei dem Zugriff auf Datenbanken für die Schulverwaltungssoftware in NRW

There is a newer version: 1.0.1
Show newest version
package de.svws_nrw.data.email;

import de.svws_nrw.core.data.email.SMTPServerKonfiguration;
import de.svws_nrw.data.DataBasicMapper;
import de.svws_nrw.data.DataManager;
import de.svws_nrw.data.JSONMapper;
import de.svws_nrw.db.DBEntityManager;
import de.svws_nrw.db.dto.current.schule.DTOSchuleEmail;
import de.svws_nrw.db.utils.ApiOperationException;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;

import java.io.InputStream;
import java.util.Collections;
import java.util.Map;
import java.util.function.Function;


/**
 * Diese Klasse erweitert den abstrakten {@link DataManager} für den
 * Core-DTO {@link SMTPServerKonfiguration}.
 */
public final class DataEmailSMTPServerKonfiguration extends DataManager {

	/**
	 * Erstellt einen neuen {@link DataManager} für den Core-DTO {@link SMTPServerKonfiguration}.
	 *
	 * @param conn   die Datenbank-Verbindung für den Datenbankzugriff
	 */
	public DataEmailSMTPServerKonfiguration(final DBEntityManager conn) {
		super(conn);
	}


	/**
	 * Lambda-Ausdruck zum Umwandeln eines Datenbank-DTOs {@link DTOSchuleEmail} in einen Core-DTO {@link SMTPServerKonfiguration}.
	 */
	private static final Function dtoMapper = (final DTOSchuleEmail dto) -> {
		final SMTPServerKonfiguration daten = new SMTPServerKonfiguration();
		daten.id = dto.ID;
		daten.host = dto.SMTPServer;
		daten.port = dto.SMTPPort;
		daten.useStartTLS = dto.SMTPStartTLS;
		daten.useTLS = dto.SMTPUseTLS;
		daten.trustTLSHost = dto.SMTPTrustTLSHost;
		return daten;
	};

	@Override
	public Response getAll() {
		throw new UnsupportedOperationException();
	}

	@Override
	public Response getList() {
		throw new UnsupportedOperationException();
	}


	/**
	 * Gibt das Datenbank-DTO für die Email-Konfiguration dieser Schule zurück.
	 *
	 * @param conn   die Datenbank-Verbindung.
	 *
	 * @return das DTO
	 */
	public static DTOSchuleEmail getOrCreate(final DBEntityManager conn) {
		DTOSchuleEmail dto = conn.querySingle(DTOSchuleEmail.class);
		if (dto == null) {
			dto = new DTOSchuleEmail(1, "", 25, true, false);
			conn.transactionPersist(dto);
			conn.transactionFlush();
		}
		return dto;
	}


	/**
	 * Gibt die SMTP-Server-Konfiguration dieser Schule zurück.
	 *
	 * @param conn   die Datenbank-Verbindung.
	 *
	 * @return die SMTP-Server-Konfiguration
	 */
	public static SMTPServerKonfiguration getOrCreateSMTPServerKonfiguration(final DBEntityManager conn) {
		return dtoMapper.apply(getOrCreate(conn));
	}


	/**
	 * Ermittelt die SMTP-Server-Konfiguration der Schule
	 *
	 * @param conn   die Datenbank-Verbindung.
	 *
	 * @return die Response mit der SMTP-Server-Konfiguration
	 */
	public static Response get(final DBEntityManager conn) {
		final SMTPServerKonfiguration daten = getOrCreateSMTPServerKonfiguration(conn);
		return Response.status(Status.OK).type(MediaType.APPLICATION_JSON).entity(daten).build();
	}


	@Override
	public Response get(final Long id) {
		throw new UnsupportedOperationException();
	}


	private static final Map> patchMappings = Map.ofEntries(
			Map.entry("id", (conn, dto, value, map) -> {
				final Long patch_id = JSONMapper.convertToLong(value, true);
				if ((patch_id == null) || (patch_id.longValue() != dto.ID))
					throw new ApiOperationException(Status.BAD_REQUEST);
			}),
			Map.entry("host", (conn, dto, value, map) -> dto.SMTPServer = JSONMapper.convertToString(value, false, true, 256)),
			Map.entry("port", (conn, dto, value, map) -> dto.SMTPPort = JSONMapper.convertToIntegerInRange(value, false, 1, 65536)),
			Map.entry("useStartTLS", (conn, dto, value, map) -> dto.SMTPStartTLS = JSONMapper.convertToBoolean(value, false)),
			Map.entry("useTLS", (conn, dto, value, map) -> dto.SMTPUseTLS = JSONMapper.convertToBoolean(value, false)),
			Map.entry("trustTLSHost", (conn, dto, value, map) -> dto.SMTPTrustTLSHost = JSONMapper.convertToString(value, true, false, 256)));


	@Override
	public Response patch(final InputStream is) throws ApiOperationException {
		final DTOSchuleEmail dto = getOrCreate(conn);
		applyPatchMappings(conn, dto, JSONMapper.toMap(is), patchMappings, Collections.emptySet(), null);
		conn.transactionPersist(dto);
		conn.transactionFlush();
		return Response.status(Status.NO_CONTENT).build();
	}


	@Override
	public Response patch(final Long id, final InputStream is) {
		throw new UnsupportedOperationException();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy