de.jfachwert.net.EMailAdresse.java Source code

Java tutorial

Introduction

Here is the source code for de.jfachwert.net.EMailAdresse.java

Source

/*
 * Copyright (c) 2017 by Oliver Boehm
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * (c)reated 23.06.2017 by oboehm (ob@oasd.de)
 */
package de.jfachwert.net;

import de.jfachwert.Text;
import de.jfachwert.pruefung.EMailValidator;
import org.apache.commons.lang3.StringUtils;

import java.util.WeakHashMap;

/**
 * Eine E-Mail-Adresse ist die eindeutige Absender- und Empfaengeradresse im
 * E-Mail-Verkehr. Sie besteht aus zwei Teilen, die durch ein @-Zeichen
 * voneinander getrennt sind:
 * <ul>
 *     <li>
 *         Der lokale Teil, im Englischen local-part genannt,
 *         steht vor dem @-Zeichen.
 *     </li>
 *     <li>
 *         Der globale Teil, im Englischen domain-part genannt,
 *         steht nach dem @-Zeichen.
 *     </li>
 * </ul>
 * Bei der E-Mail-Adresse "email@example.com" ist "email" der lokale Teil
 * und "example.com" der globale Teil.
 *
 * @author oboehm
 * @since 0.3 (23.06.2017)
 */
public class EMailAdresse extends Text {

    private static final EMailValidator DEFAULT_VALIDATOR = new EMailValidator();
    private static final WeakHashMap<String, EMailAdresse> WEAK_CACHE = new WeakHashMap<>();

    /**
     * Legt eine Instanz einer EMailAdresse an.
     *
     * @param emailAdresse eine gueltige Adresse, z.B. "max@mustermann.de"
     */
    public EMailAdresse(String emailAdresse) {
        this(emailAdresse, DEFAULT_VALIDATOR);
    }

    /**
     * Legt eine Instanz einer EMailAdresse an. Dieser Konstruktor ist
     * hauptsaechlich fuer abgeleitete Klassen gedacht, die ihre eigene
     * Validierung mit einbringen wollen oder aus Performance-Gruenden
     * abschalten wollen.
     *
     * @param emailAdresse eine gueltige Adresse, z.B. "max@mustermann.de"
     * @param validator    SimpleValidator zur Adressen-Validierung
     */
    public EMailAdresse(String emailAdresse, EMailValidator validator) {
        super(validator.verify(emailAdresse));
    }

    /**
     * Liefert einen EmailAdresse.
     *
     * @param name gueltige Email-Adresse
     * @return EMailAdresse
     */
    public static EMailAdresse of(String name) {
        return WEAK_CACHE.computeIfAbsent(name, EMailAdresse::new);
    }

    /**
     * Als Local Part wird der Teil einer E-Mail-Adresse bezeichnet, der die
     * Adresse innerhalb der Domain des E-Mail-Providers eindeutig bezeichnet.
     * Typischerweise entspricht der Lokalteil dem Benutzernamen (haeufig ein
     * Pseudonym) des Besitzers des E-Mail-Kontos.
     *
     * @return z.B. "Max.Mustermann"
     */
    public String getLocalPart() {
        return StringUtils.substringBeforeLast(this.getCode(), "@");
    }

    /**
     * Der Domain Part, der hinter dem @-Zeichen steht und fuer den die
     * Syntaxregeln des Domain Name Systems gelten, besteht mindestens aus drei
     * Teilen: einem Hostnamen (z. B. ein Firmenname), einem Punkt und einer
     * Top-Level-Domain.
     *
     * @return z.B. "fachwert.de"
     */
    public Domainname getDomainPart() {
        return new Domainname(StringUtils.substringAfterLast(this.getCode(), "@"));
    }

}