diff --git a/src/main/java/ca/gc/schema/iso19139hnap/util/XslUtilHnap.java b/src/main/java/ca/gc/schema/iso19139hnap/util/XslUtilHnap.java index 8c73449f..08ad735b 100644 --- a/src/main/java/ca/gc/schema/iso19139hnap/util/XslUtilHnap.java +++ b/src/main/java/ca/gc/schema/iso19139hnap/util/XslUtilHnap.java @@ -44,6 +44,8 @@ import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; public class XslUtilHnap { @@ -254,4 +256,21 @@ String removeFromUrl(ArrayList parametersToRemove, String url) { return result; } + + /** + * Validate if email format. Empty email is allowed based on parameter of allowEmptyEmail. + * See more info: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address + * @param emailAddress email address to validate the pattern + * @param allowEmptyEmail allow empty email input. The empty email was handled within the schematron already. This flag allows to ignore repeat checking. + * @return boolean + */ + public static boolean isEmailFormat(String emailAddress, boolean allowEmptyEmail) { + if (allowEmptyEmail && org.apache.commons.lang3.StringUtils.isEmpty(emailAddress)) { + return true; + } + + Pattern pattern = Pattern.compile("^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"); + Matcher matcher = pattern.matcher(emailAddress); + return matcher.matches(); + } } diff --git a/src/main/plugin/iso19139.ca.HNAP/loc/eng/schematron-rules-multilingual.xml b/src/main/plugin/iso19139.ca.HNAP/loc/eng/schematron-rules-multilingual.xml index 6673fca2..b5da4548 100644 --- a/src/main/plugin/iso19139.ca.HNAP/loc/eng/schematron-rules-multilingual.xml +++ b/src/main/plugin/iso19139.ca.HNAP/loc/eng/schematron-rules-multilingual.xml @@ -83,4 +83,6 @@ Thesaurus cited responsible party organisation is required Thesaurus cited responsible party role is required Thesaurus cited responsible party email is required + + Electronic mail address format is invalid (for example abc@abc.com) diff --git a/src/main/plugin/iso19139.ca.HNAP/loc/eng/schematron-rules-non-multilingual.xml b/src/main/plugin/iso19139.ca.HNAP/loc/eng/schematron-rules-non-multilingual.xml index c1aba0f5..97d41679 100644 --- a/src/main/plugin/iso19139.ca.HNAP/loc/eng/schematron-rules-non-multilingual.xml +++ b/src/main/plugin/iso19139.ca.HNAP/loc/eng/schematron-rules-non-multilingual.xml @@ -56,4 +56,6 @@ Online resource description content type is not valid. Valid values are: Web Service,Service Web,Dataset,Données,API,Application,Supporting Document,Document de soutien Online resource description format is not valid. Valid values are: Online resource description language is not valid. Should be a comma separated values of ISO-LANG-3 codes + + Electronic mail address format is invalid (for example abc@abc.com) diff --git a/src/main/plugin/iso19139.ca.HNAP/loc/fre/schematron-rules-multilingual.xml b/src/main/plugin/iso19139.ca.HNAP/loc/fre/schematron-rules-multilingual.xml index 68b50d70..e43d4f7f 100644 --- a/src/main/plugin/iso19139.ca.HNAP/loc/fre/schematron-rules-multilingual.xml +++ b/src/main/plugin/iso19139.ca.HNAP/loc/fre/schematron-rules-multilingual.xml @@ -84,4 +84,6 @@ Le nom de l’organisation responsable du thésaurus est requis Le rôle du responsable du thesaurus est requis Le courriel du responsable du thésaurus est requis + + Le format de l'adresse électronique n'est pas valide (par exemple abc@abc.com) diff --git a/src/main/plugin/iso19139.ca.HNAP/loc/fre/schematron-rules-non-multilingual.xml b/src/main/plugin/iso19139.ca.HNAP/loc/fre/schematron-rules-non-multilingual.xml index 77a8e121..f8370753 100644 --- a/src/main/plugin/iso19139.ca.HNAP/loc/fre/schematron-rules-non-multilingual.xml +++ b/src/main/plugin/iso19139.ca.HNAP/loc/fre/schematron-rules-non-multilingual.xml @@ -56,4 +56,6 @@ Le type de contenu dans la description de la ressource en ligne n'est pas valide. Les valeurs valides sont : Web Service,Service Web,Dataset,Données,API,Application,Supporting Document,Document de soutien Le format dans la description de la ressource en ligne n’est pas valide. Les valeurs valides sont : La langue dans la description de la ressource en ligne n’est pas valide. Devrait être des valeurs de code ISO-LANG-3 séparées par des virgules + + Le format de l'adresse électronique n'est pas valide (par exemple abc@abc.com) diff --git a/src/main/plugin/iso19139.ca.HNAP/schematron/schematron-rules-multilingual.sch b/src/main/plugin/iso19139.ca.HNAP/schematron/schematron-rules-multilingual.sch index 84a1f528..e100b4ad 100644 --- a/src/main/plugin/iso19139.ca.HNAP/schematron/schematron-rules-multilingual.sch +++ b/src/main/plugin/iso19139.ca.HNAP/schematron/schematron-rules-multilingual.sch @@ -164,6 +164,7 @@ /> + @@ -348,17 +349,23 @@ + + - - + + + + $loc/strings/ContactElectronicMail + $loc/strings/ElectronicMailFormat @@ -570,17 +577,24 @@ + + - - + + + + $loc/strings/CitedResponsiblePartyElectronicMail + $loc/strings/ElectronicMailFormat + @@ -673,14 +687,22 @@ - + + + - + + + + $loc/strings/ECThesaurusEmail + + $loc/strings/ElectronicMailFormat @@ -973,17 +995,24 @@ + + - - + + + + $loc/strings/DistributorElectronicMail + $loc/strings/ElectronicMailFormat + diff --git a/src/main/plugin/iso19139.ca.HNAP/schematron/schematron-rules-non-multilingual.sch b/src/main/plugin/iso19139.ca.HNAP/schematron/schematron-rules-non-multilingual.sch index 7491d94a..ad5efc52 100644 --- a/src/main/plugin/iso19139.ca.HNAP/schematron/schematron-rules-non-multilingual.sch +++ b/src/main/plugin/iso19139.ca.HNAP/schematron/schematron-rules-non-multilingual.sch @@ -160,6 +160,7 @@ /> + @@ -220,15 +221,20 @@ + - + + $loc/strings/ContactElectronicMail + $loc/strings/ElectronicMailFormat + @@ -318,15 +324,17 @@ |//*[@gco:isoType='gmd:MD_DataIdentification']/gmd:citation/*/gmd:citedResponsibleParty/*/gmd:contactInfo/*/gmd:address/gmd:CI_Address/gmd:electronicMailAddress |//*[@gco:isoType='srv:SV_ServiceIdentification']/gmd:citation/*/gmd:citedResponsibleParty/*/gmd:contactInfo/*/gmd:address/gmd:CI_Address/gmd:electronicMailAddress"> - - + + + $loc/strings/CitedResponsiblePartyElectronicMail + $loc/strings/ElectronicMailFormat + @@ -394,12 +402,17 @@ - + + $loc/strings/ECThesaurusEmail + + $loc/strings/ElectronicMailFormat + @@ -555,14 +568,19 @@ - + + $loc/strings/DistributorElectronicMail + + $loc/strings/ElectronicMailFormat + diff --git a/src/test/java/ca/gc/schema/iso19139hnap/util/XslUtilHnapTest.java b/src/test/java/ca/gc/schema/iso19139hnap/util/XslUtilHnapTest.java index a5fd92cd..45db26dc 100644 --- a/src/test/java/ca/gc/schema/iso19139hnap/util/XslUtilHnapTest.java +++ b/src/test/java/ca/gc/schema/iso19139hnap/util/XslUtilHnapTest.java @@ -31,6 +31,8 @@ import java.util.ArrayList; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; /** * Tests for {@link XslUtilHnap} class. @@ -133,6 +135,22 @@ public void removeFromUrl() { } + @Test + public void testIsEmailAddress() { + assertTrue(XslUtilHnap.isEmailFormat("o'brian.test@localhost", false)); + assertTrue(XslUtilHnap.isEmailFormat("o'brian.test@localhost.com", false)); + + assertFalse(XslUtilHnap.isEmailFormat("o'brian.test@localhost.com.", false)); + assertFalse(XslUtilHnap.isEmailFormat("o'brian.test@localhost.", false)); + assertFalse(XslUtilHnap.isEmailFormat("o'brian.test@", false)); + assertFalse(XslUtilHnap.isEmailFormat("o'brian.test", false)); + + assertFalse(XslUtilHnap.isEmailFormat("",false)); + assertTrue(XslUtilHnap.isEmailFormat("",true)); + assertTrue(XslUtilHnap.isEmailFormat(null,true)); + + } + class MyTinyNodeImpl extends TinyNodeImpl { private String value;