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

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

package de.svws_nrw.base.untis;

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

import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.dataformat.csv.CsvGenerator;
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 GPU010.txt} des
 * Untis-Datenaustausch-Formates und enthält damit eine Beschreibung der
 * Stundenten bzw. Schüler.
 */
public final class UntisGPU010 {

	/** Der Name des Schülers (z.B. "Adam_Tho_20031119") */
	public String name;

	/** Der Langname (z.B. der Nachname "Adam") */
	public String langname;

	/** Ein Text */
	public String text;

	/** Eine Beschreibung */
	public String beschreibung;

	/** Statistik-Feld 1 */
	public String statistik1;

	/** Statistik-Feld 2 */
	public String statistik2;

	/** Ein Kennzeichen */
	public String kennzeichen;

	/** Der Vorname des Schülers (z.B. "Thomas") */
	public String vorname;

	/** Eine Nummer des Schülers (z.B. "42") */
	public String schuelernummer;

	/** Die Klasse des Schülers */
	public String klasse;

	/** Das Geschlecht des Schüler (1 = weiblich, 2 = männlich) */
	public String geschlecht;

	/** Ein (Kurs-)Optimierungskennzeichen */
	public String optimierungskennzeichen;

	/** Das Geburtsdatum JJJJMMTT */
	public String geburtsdatum;

	/** Die E-Mail Adresse */
	public String emailAdresse;

	/** Ein Fremdschlüssel / externe ID (z.B. "1001") */
	public String fremdschluessel;

	/** Ignorieren - Dummy für das Einlesen der Daten */
	public String dummy;


	/** Das CSV-Schema */
	private static final CsvSchema schema = CsvSchema.builder()
			.addColumn("name")
			.addColumn("langname")
			.addColumn("text")
			.addColumn("beschreibung")
			.addColumn("statistik1")
			.addColumn("statistik2")
			.addColumn("kennzeichen")
			.addColumn("vorname")
			.addColumn("schuelernummer")
			.addColumn("klasse")
			.addColumn("geschlecht")
			.addColumn("optimierungskennzeichen")
			.addColumn("geburtsdatum")
			.addColumn("emailAdresse")
			.addColumn("fremdschluessel")
			.addColumn("dummy")
			.build()
			.withColumnSeparator(';')
			.withQuoteChar('\"')
			.withNullValue("")
			.withoutHeader();

	/** Die Instanz des Object-Readers für die CSV-Daten */
	private static final ObjectReader reader = new CsvMapper().readerFor(UntisGPU010.class).with(schema);

	/** Die Instanz des Object-Writers für die CSV-Daten */
	private static final ObjectWriter writer = new CsvMapper().writerFor(UntisGPU010.class).with(schema).with(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS);


	/**
	 * Erstellt aus den übergebenen CSV-Daten eine Liste der GPU010-Datensätze
	 *
	 * @param csvData   die Daten des CSV-Datei als String
	 *
	 * @return eine Liste mit den GPU010-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();
		}
	}


	/**
	 * Erstellt aus der übergebenen Liste der DTOs die CSV-Daten als String
	 *
	 * @param dtos   die Liste der DTOs
	 *
	 * @return die CSV-Daten als UTF-8 String
	 *
	 * @throws IOException falls die CSV-Daten nicht erstellt werden können
	 */
	@SuppressWarnings("resource")
	public static String writeCSV(final @NotNull List dtos) throws IOException {
		final StringWriter sw = new StringWriter();
		writer.writeValues(sw).writeAll(dtos).close();
		return sw.toString();
	}


	@Override
	public String toString() {
		return "Unterrichtsfolge [name=" + name + ", langname=" + langname + ", vorname=" + vorname + ", fremdschluessel=" + fremdschluessel
				+ ", klasse=" + klasse + ", geschlecht=" + geschlecht + ", geburtsdatum=" + geburtsdatum + ", emailAdresse=" + emailAdresse + "]";
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy