
package de.ivu.elect.presentation.person.table;

import java.util.function.Function;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.person.entity.PersonendatenConstants;
import de.ivu.elect.presentation.table.DefaultColumnEntry;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

import de.ivu.elect.jee.faces.Messages;

@javax.enterprise.inject.Vetoed
public class AbstractPersonendatenColumn<E extends Personendaten> extends
            DefaultColumnEntry<E>
        {
    private static final long serialVersionUID = 1L;

    @Deprecated // Eindeutige Id vergeben, wichtig für Spaltenreihenfolge ELECT-4631
    protected AbstractPersonendatenColumn(Messages messages, String headerKey, ColumnType type, Function<E, Object> getter) {
      super(messages, headerKey, type, getter);
    }

    protected  AbstractPersonendatenColumn(String id, Messages messages, String headerKey, ColumnType type, Function<E, Object> getter) {
      super(id, messages, headerKey, type, getter);
    }

            
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenAkademischerGradUnformatiertColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-AkademischerGradUnformatiert", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_AKADEMISCHER_GRAD_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getAkademischerGradUnformatiert);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenAnredeColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Anrede", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_ANREDE_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getAnrede);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenAuswaertigColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Auswaertig", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_AUSWAERTIG_EINZAHL,
                            ColumnType.BOOLEAN
                        , Personendaten::getAuswaertig);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenBemerkungColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Bemerkung", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_BEMERKUNG_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getBemerkung);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenBerufUnformatiertColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-BerufUnformatiert", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_BERUF_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getBerufUnformatiert);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenBerufsschluesselColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Berufsschluessel", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_BERUFSSCHLUESSEL_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getBerufsschluessel);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenBewertungColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Bewertung", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_BEWERTUNG_EINZAHL,
                            ColumnType.LONG
                        , Personendaten::getBewertung);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenDiscriminatorColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Discriminator", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_DISCRIMINATOR_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getDiscriminator);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenEhrenamtUnformatiertColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-EhrenamtUnformatiert", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_EHRENAMT_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getEhrenamtUnformatiert);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenPersonenregisterAbgleichStatusColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-PersonenregisterAbgleichStatus", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_EXTERNER_ABGLEICH_STATUS_EINZAHL,
                            ColumnType.ENUM
                        , Personendaten::getPersonenregisterAbgleichStatus);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenPersonenregisterAbgleichZeitpunktColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-PersonenregisterAbgleichZeitpunkt", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_EXTERNER_ABGLEICH_ZEITPUNKT_EINZAHL,
                            ColumnType.TIMESTAMP
                        , Personendaten::getPersonenregisterAbgleichZeitpunkt);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenExternesOrdnungsmerkmalColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-ExternesOrdnungsmerkmal", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_EXTERNES_ORDNUNGSMERKMAL_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getExternesOrdnungsmerkmal);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenExterneIdColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-ExterneId", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_EXTERNE_ID_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getExterneId);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenEmailAdresseColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-EmailAdresse", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_E_MAIL_ADRESSE_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getEmailAdresse);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenEmailAdresseArbeitColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-EmailAdresseArbeit", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_E_MAIL_ADRESSE_ARBEIT_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getEmailAdresseArbeit);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenFamiliennameColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Familienname", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_FAMILIENNAME_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getFamilienname);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenFamiliennameNormalisiertColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-FamiliennameNormalisiert", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_FAMILIENNAME_NORM_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getFamiliennameNormalisiert);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenFaxnummerColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Faxnummer", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_FAXNUMMER_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getFaxnummer);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenFinanzIdColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-FinanzId", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_FINANZ_ID_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getFinanzId);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenGeburtsdatumColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Geburtsdatum", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_GEBURTSDATUM_EINZAHL,
                            ColumnType.DATE
                        , Personendaten::getGeburtsdatum);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenGeburtsortColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Geburtsort", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_GEBURTSORT_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getGeburtsort);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenGeschlechtColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Geschlecht", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_GESCHLECHT_EINZAHL,
                            ColumnType.ENUM
                        , Personendaten::getGeschlecht);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenKuenstlernameColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Kuenstlername", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_KUENSTLERNAME_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getKuenstlername);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenFamiliennameBestandteilColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-FamiliennameBestandteil", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_NAMENSBESTANDTEILE_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getFamiliennameBestandteil);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenFamiliennameBestandteilNormalisiertColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-FamiliennameBestandteilNormalisiert", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_NAMENSBESTANDTEILE_NORM_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getFamiliennameBestandteilNormalisiert);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenOrdensnameColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Ordensname", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_ORDENSNAME_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getOrdensname);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenPersonStatusColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-PersonStatus", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_PERSON_STATUS_EINZAHL,
                            ColumnType.ENUM
                        , Personendaten::getPersonStatus);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenSichtpruefungStatusColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-SichtpruefungStatus", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_SICHTPRUEFUNG_STATUS_EINZAHL,
                            ColumnType.ENUM
                        , Personendaten::getSichtpruefungStatus);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenSperrmerkmalColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Sperrmerkmal", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_SPERRMERKMAL_EINZAHL,
                            ColumnType.ENUM
                        , Personendaten::getSperrmerkmal);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenStaatsangehoerigkeitenSortOrderColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-StaatsangehoerigkeitenSortOrder", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_STAATSANGEHOERIGKEITEN_ORDER_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getStaatsangehoerigkeitenSortOrder);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenStimmbezirkSchluesselColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-StimmbezirkSchluessel", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_STIMMBEZIRKSSCHLUESSEL_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getStimmbezirkSchluessel);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenTelefonnummerArbeitColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-TelefonnummerArbeit", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_TELEFONNUMMER_ARBEIT_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getTelefonnummerArbeit);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenTelefonnummerFestnetzColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-TelefonnummerFestnetz", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_TELEFONNUMMER_FESTNETZ_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getTelefonnummerFestnetz);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenTelefonnummerMobilColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-TelefonnummerMobil", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_TELEFONNUMMER_MOBIL_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getTelefonnummerMobil);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenTitelColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Titel", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_TITEL_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getTitel);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenRufnameColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Rufname", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_VORNAME_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getRufname);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenVornamenColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Vornamen", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_VORNAMEN_VOLLSTAENDIG_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getVornamen);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenVornamenNormalisiertColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-VornamenNormalisiert", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_VORNAMEN_VOLLSTAENDIG_NORM_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getVornamenNormalisiert);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenRufnameNormalisiertColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-RufnameNormalisiert", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_VORNAME_NORM_EINZAHL,
                            ColumnType.STRING
                        , Personendaten::getRufnameNormalisiert);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenWahlrechtsausschlussColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-Wahlrechtsausschluss", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_WAHLRECHTSAUSSCHLUSS_EINZAHL,
                            ColumnType.ENUM
                        , Personendaten::getWahlrechtsausschluss);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenZuzugsdatumBundColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-ZuzugsdatumBund", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_ZUZUGSDATUM_BUND_EINZAHL,
                            ColumnType.DATE
                        , Personendaten::getZuzugsdatumBund);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenZuzugsdatumGemeindeColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-ZuzugsdatumGemeinde", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_ZUZUGSDATUM_GEMEINDE_EINZAHL,
                            ColumnType.DATE
                        , Personendaten::getZuzugsdatumGemeinde);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenZuzugsdatumLandColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-ZuzugsdatumLand", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_ZUZUGSDATUM_LAND_EINZAHL,
                            ColumnType.DATE
                        , Personendaten::getZuzugsdatumLand);
            }




                    
            public static <E extends Personendaten> AbstractPersonendatenColumn<E> createPersonendatenZuzugsdatumStadtbezirkColumn(Messages messages){
            return new AbstractPersonendatenColumn<>("Personendaten-ZuzugsdatumStadtbezirk", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_ZUZUGSDATUM_STADTBEZIRK_EINZAHL,
                            ColumnType.DATE
                        , Personendaten::getZuzugsdatumStadtbezirk);
            }




            
    
        public static <E extends Personendaten> AbstractPersonendatenColumn<E> createAnschriftColumn(Messages messages, ColumnType type, Function<E, Object> getter){
        return new AbstractPersonendatenColumn<>("Personendaten-Anschrift", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_ANSCHRIFT_ID_EINZAHL,
        type
        , getter);
        }

    
        public static <E extends Personendaten> AbstractPersonendatenColumn<E> createCustomDataStorageColumn(Messages messages, ColumnType type, Function<E, Object> getter){
        return new AbstractPersonendatenColumn<>("Personendaten-CustomDataStorage", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_CUSTOM_DATA_STORAGE_ID_EINZAHL,
        type
        , getter);
        }

    
        public static <E extends Personendaten> AbstractPersonendatenColumn<E> createErreichbarkeitsanschriftColumn(Messages messages, ColumnType type, Function<E, Object> getter){
        return new AbstractPersonendatenColumn<>("Personendaten-Erreichbarkeitsanschrift", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_ERREICHBARKEITSANSCHRIFT_ID_EINZAHL,
        type
        , getter);
        }

    
        public static <E extends Personendaten> AbstractPersonendatenColumn<E> createFotoColumn(Messages messages, ColumnType type, Function<E, Object> getter){
        return new AbstractPersonendatenColumn<>("Personendaten-Foto", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_FOTO_ID_EINZAHL,
        type
        , getter);
        }

    
        public static <E extends Personendaten> AbstractPersonendatenColumn<E> createKontoverbindungColumn(Messages messages, ColumnType type, Function<E, Object> getter){
        return new AbstractPersonendatenColumn<>("Personendaten-Kontoverbindung", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_KONTOVERBINDUNG_ID_EINZAHL,
        type
        , getter);
        }

    
        public static <E extends Personendaten> AbstractPersonendatenColumn<E> createWahlterminColumn(Messages messages, ColumnType type, Function<E, Object> getter){
        return new AbstractPersonendatenColumn<>("Personendaten-Wahltermin", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_WAHLTERMIN_ID_EINZAHL,
        type
        , getter);
        }

    
        public static <E extends Personendaten> AbstractPersonendatenColumn<E> createWahlColumn(Messages messages, ColumnType type, Function<E, Object> getter){
        return new AbstractPersonendatenColumn<>("Personendaten-Wahl", messages, de.ivu.elect.business.person.entity.PersonendatenConstants.MESSAGE_KEY_WAHL_ID_EINZAHL,
        type
        , getter);
        }

    



    }
