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

de.svws_nrw.davapi.data.repos.bycategory.AdressbuchWithCategoriesRepository Maven / Gradle / Ivy

Go to download

Diese Bibliothek enthält die Java-Server-Definition der CalDAV und CardDAV-Schnittstelle für die Schulverwaltungssoftware in NRW

The newest version!
package de.svws_nrw.davapi.data.repos.bycategory;

import java.util.List;
import java.util.Optional;
import java.util.ArrayList;

import de.svws_nrw.core.data.adressbuch.Adressbuch;
import de.svws_nrw.core.data.adressbuch.AdressbuchEintrag;
import de.svws_nrw.core.data.adressbuch.AdressbuchKontakt;
import de.svws_nrw.davapi.data.CollectionRessourceQueryParameters;
import de.svws_nrw.davapi.data.IAdressbuchKontaktRepository;
import de.svws_nrw.davapi.data.IAdressbuchRepository;
import de.svws_nrw.davapi.util.AdressbuchTyp;
import de.svws_nrw.db.DBEntityManager;

/**
 * Eine Implementierung des Adressbuchrepositories für Datenbankzugriffe. Bei
 * dieser Implementierung werden Adressbücher nur für die
 * {@link AdressbuchContactTypes} erstellt, Kontakte innerhalb des Adressbuchs
 * mit Kategorien ergänzt und damit im Client sortier- und suchbar.
 *
 */
public final class AdressbuchWithCategoriesRepository implements IAdressbuchRepository {

	/**
	 * Kontaktrepository zum Anreichern eines Adressbuchs um
	 * {@link AdressbuchKontakt}e
	 */
	private final IAdressbuchKontaktRepository adressbuchKontaktRepository;

	/**
	 * Erstellt ein neues Repository mit der angegebenen Verbindung
	 *
	 * @param conn die Datenbank-Verbindung, welche vom Repository benutzt werden
	 *             soll
	 */
	public AdressbuchWithCategoriesRepository(final DBEntityManager conn) {
		this.adressbuchKontaktRepository = new AdressbuchEintragWithCategoriesRepository(conn);
	}

	@Override
	public Optional getAdressbuchById(final String adressbuchId, final CollectionRessourceQueryParameters params) {
		final Optional adressbuchOpt = this.getAvailableAdressbuecher(params).stream()
				.filter(a -> a.id.equals(adressbuchId)).findFirst();
		if (adressbuchOpt.isEmpty()) {
			return adressbuchOpt;
		}
		if (params.includeRessources) {
			final List kontakteByAdressbuch = adressbuchKontaktRepository
					.getKontakteByAdressbuch(adressbuchId, params);
			adressbuchOpt.get().adressbuchEintraege.addAll(kontakteByAdressbuch);
		}
		return adressbuchOpt;
	}

	@Override
	public List getAvailableAdressbuecher(final CollectionRessourceQueryParameters params) {
		final List result = new ArrayList<>();
		result.add(createAdressbuch(AdressbuchContactTypes.SCHUELER));
		result.add(createAdressbuch(AdressbuchContactTypes.LEHRER));
		result.add(createAdressbuch(AdressbuchContactTypes.ERZIEHER));
		// TODO persönliche, öffentiche Adressbuecher und Adressbuecher für
		// Personengruppen sind noch nicht implementiert
		return result;
	}

	/**
	 * Erstellt ein Adressbuch mit gegebener Adressbuch Kontakt Art und gegebenem
	 * AdressbuchTyp
	 *
	 * @param adressbuchContactTypes die Art des Adressbuchs nach Kontakten, gibt
	 *                               die ID und Beschreibung des Adressbuchs
	 * @param typ                    der AdressbuchTyp unterscheidet, ob ein
	 *                               Adressbuch persönlich, generiert oder
	 *                               öffentlich ist
	 * @return das erzeugte Adressbuch
	 */
	private static Adressbuch createAdressbuch(final AdressbuchContactTypes adressbuchContactTypes, final AdressbuchTyp typ) {
		return createAdressbuch(adressbuchContactTypes.toString().toLowerCase(), adressbuchContactTypes.anzeigeName,
				adressbuchContactTypes.beschreibung);
	}

	/**
	 * Erstellt ein neues Adressbuch anhand eines {@link AdressbuchContactTypes}
	 *
	 * @param adressbuchType die Art des Adressbuchs
	 * @return das erstellte Adressbuch
	 */
	private static Adressbuch createAdressbuch(final AdressbuchContactTypes adressbuchType) {
		return createAdressbuch(adressbuchType, AdressbuchTyp.GENERIERT);
	}

	/**
	 * Erstellt ein neues Adressbuch mit Id, anzeigename und Beschreibung
	 *
	 * @param id           die ID des Adressbuchs
	 * @param displayName  der Anzeigename des Adressbuchs
	 * @param beschreibung die Beschreibung des Adressbuchs
	 * @return das erstellte Adressbuch
	 */
	private static Adressbuch createAdressbuch(final String id, final String displayName, final String beschreibung) {
		final Adressbuch a = new Adressbuch();
		a.adressbuchTyp = AdressbuchTyp.GENERIERT.bezeichnung;
		a.beschreibung = beschreibung;
		a.displayname = displayName;
		a.id = id;
		return a;
	}

	/**
	 * Enum für die verschiedenen Adressbuecher, die dieses Repository abbildet
	 *
	 */
	public enum AdressbuchContactTypes {
		/** ein Adressbuch mit Schuelerdaten */
		SCHUELER("Schüler", "Ein generiertes Adressbuch mit allen Schülern"),
		/** ein Adressbuch mit Lehrerdaten */
		LEHRER("Lehrer", "Ein generiertes Adressbuch mit allen Lehrern"),
		/** ein Adressbuch mit Erzieherdaten */
		ERZIEHER("Erzieher", "Ein generiertes Adressbuch mit allen Erziehungsberechtigten"),
		/** ein persönliches Adressbuch */
		PERSOENLICH("Persönlich", "Ihr persönliches Adressbuch"),
		/** ein Adressbuch mit Daten von Personengruppen */
		PERSONENGRUPPEN("Personengruppen", "Ein generiertes Adressbuch mit Personengruppen"),
		/** ein öffentliches Adressbuch */
		OEFFENTLICH("Öffentlich", "Das öffentliche Adressbuch der Schule");

		/** der Anzeigename des Adressbuchs */
		private final String anzeigeName;
		/** die Beschreibung des Adressbuchs */
		private final String beschreibung;

		/**
		 * erstellt eine neue Adressbuchkonstakte mit Anzeigename und Beschreibung
		 *
		 * @param anzeigeName  der Anzeigename
		 * @param beschreibung die Beschreibung
		 */
		AdressbuchContactTypes(final String anzeigeName, final String beschreibung) {
			this.anzeigeName = anzeigeName;
			this.beschreibung = beschreibung;
		}
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy