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

de.svws_nrw.data.stundenplan.DataStundenplanKalenderwochenzuordnung 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.stundenplan;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import de.svws_nrw.core.data.stundenplan.StundenplanKalenderwochenzuordnung;
import de.svws_nrw.core.utils.DateUtils;
import de.svws_nrw.data.DataManagerRevised;
import de.svws_nrw.data.JSONMapper;
import de.svws_nrw.db.DBEntityManager;
import de.svws_nrw.db.dto.current.schild.stundenplan.DTOStundenplanKalenderwochenZuordnung;
import de.svws_nrw.db.utils.ApiOperationException;
import jakarta.ws.rs.core.Response.Status;

/**
 * Der Daten-Manager für die Kalenderwochenzuordnung eines Stundenplans:
 * {@link DTOStundenplanKalenderwochenZuordnung} und {@link StundenplanKalenderwochenzuordnung}.
 */
public final class DataStundenplanKalenderwochenzuordnung
		extends DataManagerRevised {

	private final Long stundenplanID;

	/**
	 * Erstellt einen neuen Manager.
	 *
	 * @param conn            die Datenbank-Verbindung für den Datenbankzugriff
	 * @param stundenplanID   die ID des Stundenplans, dessen Kalenderwochen-Zuordnungen abgefragt werden
	 *
	 * @throws ApiOperationException   falls die Stundenplan-ID ungültig ist
	 */
	public DataStundenplanKalenderwochenzuordnung(final DBEntityManager conn, final Long stundenplanID) throws ApiOperationException {
		super(conn);
		setAttributesRequiredOnCreation("jahr", "kw", "wochentyp");
		this.stundenplanID = stundenplanID;
		// Prüfe ggf. ob der Stundenplan existiert
		if (stundenplanID != null)
			DataStundenplan.getDTOStundenplan(conn, stundenplanID);
	}

	@Override
	protected Long getID(final Map attributes) {
		return (Long) attributes.get("id");
	}


	@Override
	protected void initDTO(final DTOStundenplanKalenderwochenZuordnung dto, final Long newId) throws ApiOperationException {
		dto.ID = newId;
		dto.Stundenplan_ID = this.stundenplanID;
	}


	@Override
	public StundenplanKalenderwochenzuordnung map(final DTOStundenplanKalenderwochenZuordnung dto) {
		final StundenplanKalenderwochenzuordnung daten = new StundenplanKalenderwochenzuordnung();
		daten.id = dto.ID;
		daten.jahr = dto.Jahr;
		daten.kw = dto.KW;
		daten.wochentyp = dto.Wochentyp;
		return daten;
	}


	@Override
	protected void mapAttribute(final DTOStundenplanKalenderwochenZuordnung dto, final String name, final Object value, final Map map)
			throws ApiOperationException {
		switch (name) {
			case "id" -> {
				final Long patch_id = JSONMapper.convertToLong(value, true);
				if ((patch_id == null) || (patch_id.longValue() != dto.ID))
					throw new ApiOperationException(Status.BAD_REQUEST);
			}
			case "jahr" -> {
				dto.Jahr = JSONMapper.convertToInteger(value, false);
				if (DateUtils.gibIstJahrUngueltig(dto.Jahr))
					throw new ApiOperationException(Status.BAD_REQUEST);
			}
			case "kw" -> dto.KW = JSONMapper.convertToInteger(value, false);
			case "wochentyp" -> dto.Wochentyp = JSONMapper.convertToInteger(value, false);
			default -> throw new ApiOperationException(Status.BAD_REQUEST, "Die Daten des Patches enthalten ein unbekanntes Attribut.");
		}
	}


	/**
	 * Gibt die Pausenzeiten des Stundenplans zurück.
	 *
	 * @return die Liste der Pausenzeiten
	 *
	 * @throws ApiOperationException   im Fehlerfall
	 */
	@Override
	public List getList() throws ApiOperationException {
		final List zuordnungen = conn.queryList(DTOStundenplanKalenderwochenZuordnung.QUERY_BY_STUNDENPLAN_ID,
				DTOStundenplanKalenderwochenZuordnung.class, stundenplanID);
		final ArrayList daten = new ArrayList<>();
		for (final DTOStundenplanKalenderwochenZuordnung z : zuordnungen)
			daten.add(map(z));
		return daten;
	}


	@Override
	public StundenplanKalenderwochenzuordnung getById(final Long id) throws ApiOperationException {
		if (id == null)
			throw new ApiOperationException(Status.BAD_REQUEST, "Eine Anfrage zu einer Kalenderwochen-Zuordnung mit der ID null ist unzulässig.");
		final DTOStundenplanKalenderwochenZuordnung zuordung = conn.queryByKey(DTOStundenplanKalenderwochenZuordnung.class, id);
		if (zuordung == null)
			throw new ApiOperationException(Status.NOT_FOUND, "Es wurde keine Kalenderwochen-Zuordnung mit der ID %d gefunden.".formatted(id));
		return map(zuordung);
	}


	/**
	 * Prüft vor dem Löschen von Pausenzeiten, ob diese alle zu dem Stundenplan gehören.
	 *
	 * @param dtos    die zu löschenden DTOs
	 *
	 * @throws ApiOperationException   im Fehlerfall
	 */
	@Override
	public void checkBeforeDeletion(final List dtos) throws ApiOperationException {
		for (final DTOStundenplanKalenderwochenZuordnung dto : dtos)
			if (dto.Stundenplan_ID != this.stundenplanID)
				throw new ApiOperationException(Status.BAD_REQUEST, "Mindestens eine Kalenderwochenzuordnung gehört nicht zu dem angegebenen Stundenplan.");
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy