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

de.svws_nrw.base.untis.UntisGPU001 Maven / Gradle / Ivy

package de.svws_nrw.base.untis;

import java.io.IOException;
import java.util.List;

import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;

import jakarta.validation.constraints.NotNull;

/**
 * Diese Klasse dient als DTO für die CSV-Datei {@code GPU001.txt} des
 * Untis-Datenaustausch-Formates und enthält damit eine Beschreibung des
 * Stundenplans.
 */
public final class UntisGPU001 {

	/** Eine numerische ID, welche den Unterricht eindeutig identifiziert (z.B. 42) */
	public long idUnterricht;

	/** Das Kürzel der Klasse (z.B. "05A") */
	public String klasseKuerzel;

	/** Das Kürzel des Lehrers (z.B. "BACH") */
	public String lehrerKuerzel;

	/** Das Kürzel des Fachen (z.B. "D") */
	public String fachKuerzel;

	/** Das Kürzel des Raumes (z.B. "") */
	public String raumKuerzel;

	/** Der Wochentag für den Unterricht */
	public int wochentag;

	/** Die Stunde im Zeitraster des Wochentags */
	public int stunde;

	/** Ggf. die Stundenlänge in Minuten oder leer */
	public Integer dauer = null;

	/** Dummy - Dieses Feld wird von Untis nicht belegt und kann genutzt werden, um den Wochentyp für den SVWS-Server anzugeben */
	public String wochentyp;



	/** Die Instanz des Object-Readers für die CSV-Daten */
	private static final ObjectReader reader = new CsvMapper().readerFor(UntisGPU001.class).with(CsvSchema.builder()
			.addNumberColumn("idUnterricht")
			.addColumn("klasseKuerzel")
			.addColumn("lehrerKuerzel")
			.addColumn("fachKuerzel")
			.addColumn("raumKuerzel")
			.addNumberColumn("wochentag")
			.addNumberColumn("stunde")
			.addNumberColumn("dauer")
			.addColumn("wochentyp")
			.build()
			.withColumnSeparator(';')
			.withQuoteChar('\"')
			.withNullValue("")
			.withoutHeader());

	/**
	 * Erstellt aus den übergebenen CSV-Daten eine Liste der GPU001-Datensätze
	 *
	 * @param csvData   die Daten des CSV-Datei als String
	 *
	 * @return eine Liste mit den GPU001-Datensätzen
	 *
	 * @throws IOException falls die CSV-Datei nicht korrekt gelesen werden kann
	 */
	public static @NotNull List readCSV(final String csvData) throws IOException {
		try (MappingIterator it = reader.readValues(csvData)) {
			return it.readAll();
		}
	}

	@Override
	public String toString() {
		return "Unterricht[id=" + idUnterricht + ", klasse=" + klasseKuerzel + ", lehrer="
				+ lehrerKuerzel + ", fach/kurs=" + fachKuerzel + ", raum=" + raumKuerzel + ", wochentag="
				+ wochentag + ", stunde=" + stunde + ", wochentyp=" + wochentyp + "]";
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy