diff --git a/.idea/misc.xml b/.idea/misc.xml index 0abcc97..f0f8287 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/src/main/java/com/example/midterm/ConcreteEmailService.java b/src/main/java/com/example/midterm/ConcreteEmailService.java new file mode 100644 index 0000000..23538da --- /dev/null +++ b/src/main/java/com/example/midterm/ConcreteEmailService.java @@ -0,0 +1,20 @@ +package com.example.midterm; + +import org.springframework.stereotype.Component; +import dto.Email; +import service.EmailService; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Component +public class ConcreteEmailService implements EmailService { + @Override + public Email process(String email) throws Exception { + final String EMAIL_REGEX = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$"; + Pattern pattern = Pattern.compile(EMAIL_REGEX); + Matcher matcher = pattern.matcher(email); + email = matcher.replaceAll(email); + return new Email(email); + } +} diff --git a/src/main/java/com/example/midterm/ConcreteNameService.java b/src/main/java/com/example/midterm/ConcreteNameService.java index 2008297..e0246e6 100644 --- a/src/main/java/com/example/midterm/ConcreteNameService.java +++ b/src/main/java/com/example/midterm/ConcreteNameService.java @@ -1,13 +1,84 @@ package com.example.midterm; import dto.Name; + import org.springframework.stereotype.Component; import service.NameService; +// Import Regular Expression libraries +import java.util.regex.Pattern; +import java.util.regex.Matcher; + @Component public class ConcreteNameService implements NameService { @Override public Name process(String name) throws Exception { - return null; + + // Remove the following: + // "Csar", "Dr", "D. R.", "Rev.", "a.k.a. (and all the characters after it)", "M.B.A.", "J. R.", + // "M.BA", "Certified Professional", "II.", "Jr.", "Dip Ed", "DipEd", "MSc", "MPH", "DRes/PhD", "MacA", "assoc prof" + // anything enclosed in parentheses, quotation marks, single quotes, + // numbers, extra whitespaces, special characters + String cleanName = name + .replaceAll("(?i)(Csar|Dr|D\\.R\\.|Rev\\.|a\\.k\\.a.*|M\\.B\\.A\\.|J\\.|R\\.|, Bsc|Bsc|M\\.BA|Certified|Professional|\\(.*?\\)|\\\".*?\\\"|'[^']*'|\\s*\\d+|II\\.|Jr\\.|Dip|Ed|DipEd|MSc|MPH|es|PhD|MacA|assoc|prof|J)", "") + .replaceAll("[^a-zA-Z,]", " ") + .replaceAll("\\s{2,}", " ") + .trim(); + // Convert cleaned name to title case if it's in all upper or lower case + cleanName = toTitleCaseIfNecessary(cleanName); + + String[] parts; + String fname = "", lname = ""; + // Handles the format "Last, First" + if (cleanName.contains(",")) { + parts = cleanName.split(","); + lname = parts[0]; + fname = parts[1]; + //if (cleanName.contains(" ")) { + // parts = lname.split(" "); + // fname = parts[0]; + // lname = parts[1]; + //} + return new Name(fname.trim(), lname.trim()); + } + + parts = cleanName.split(" "); + if (parts.length == 2) { + fname = parts[0]; + lname = parts[1]; + return new Name(fname, lname); + }else if (parts.length > 2) { + if (parts[1].length() == 1) { + parts[1] = parts[2]; + parts[2] = ""; + } + fname = parts[0]; + lname = parts[parts.length - 2] + " " + parts[parts.length - 1]; + return new Name(fname.trim(), lname.trim()); + } + + System.out.println("fname: " + parts[0]); + System.out.println("lname: " + parts[1]); + + return new Name(fname, lname); + + + } + // Utility function to handle capitalization + private String toTitleCaseIfNecessary(String name) { + if (name.equals(name.toUpperCase()) || name.equals(name.toLowerCase())) { + String[] words = name.split(" "); + StringBuilder titleCaseName = new StringBuilder(); + for (String word : words) { + if (word.length() > 1) { + titleCaseName.append(word.substring(0, 1).toUpperCase()) + .append(word.substring(1).toLowerCase()).append(" "); + } else { + titleCaseName.append(word.toUpperCase()).append(" "); + } + } + return titleCaseName.toString().trim(); + } + return name; // Return the original name if no changes needed } } diff --git a/src/main/java/dto/Email.java b/src/main/java/dto/Email.java new file mode 100644 index 0000000..ab1dccc --- /dev/null +++ b/src/main/java/dto/Email.java @@ -0,0 +1,17 @@ +package dto; + +import lombok.Data; + +@Data +public class Email { + private String email; + + public Email(String email) { + this.email = email; + } + + public Email() + { + + } +} diff --git a/src/main/java/dto/Name.java b/src/main/java/dto/Name.java index 48983d6..e5489a3 100644 --- a/src/main/java/dto/Name.java +++ b/src/main/java/dto/Name.java @@ -2,16 +2,19 @@ import lombok.Data; +import java.util.Objects; + @Data public class Name { private String first; private String last; + public Name(String first, String last) { this.first = first; this.last = last; } - + public Name() { - + } } diff --git a/src/main/java/service/EmailService.java b/src/main/java/service/EmailService.java new file mode 100644 index 0000000..2b88a9e --- /dev/null +++ b/src/main/java/service/EmailService.java @@ -0,0 +1,9 @@ +package service; + +import dto.Email; + + +public interface EmailService { + + Email process(String email) throws Exception; +} diff --git a/src/test/java/com/example/midterm/EmailValidationControllerTests.java b/src/test/java/com/example/midterm/EmailValidationControllerTests.java new file mode 100644 index 0000000..9a79039 --- /dev/null +++ b/src/test/java/com/example/midterm/EmailValidationControllerTests.java @@ -0,0 +1,23 @@ +package com.example.midterm; +import dto.Email; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import service.EmailService; + +import static org.springframework.test.util.AssertionErrors.assertEquals; + +@SpringBootTest +public class EmailValidationControllerTests { + + @Autowired + private EmailService emailService; + + @Test + public void emailTest() throws Exception { + assertEquals("chancellor.galiza@upd.edu.ph", new Email("chancellor.galiza@upd.edu.ph"), emailService.process("chancellor.galiza@upd.edu.ph")); + } + + +} diff --git a/target/classes/com/example/midterm/ConcreteEmailService.class b/target/classes/com/example/midterm/ConcreteEmailService.class new file mode 100644 index 0000000..a06406d Binary files /dev/null and b/target/classes/com/example/midterm/ConcreteEmailService.class differ diff --git a/target/classes/com/example/midterm/ConcreteNameService.class b/target/classes/com/example/midterm/ConcreteNameService.class index fd057f3..8fa1125 100644 Binary files a/target/classes/com/example/midterm/ConcreteNameService.class and b/target/classes/com/example/midterm/ConcreteNameService.class differ diff --git a/target/classes/dto/Email.class b/target/classes/dto/Email.class new file mode 100644 index 0000000..b63a439 Binary files /dev/null and b/target/classes/dto/Email.class differ diff --git a/target/classes/dto/Name.class b/target/classes/dto/Name.class index d361cf4..91caf6a 100644 Binary files a/target/classes/dto/Name.class and b/target/classes/dto/Name.class differ diff --git a/target/classes/service/EmailService.class b/target/classes/service/EmailService.class new file mode 100644 index 0000000..2fbce11 Binary files /dev/null and b/target/classes/service/EmailService.class differ diff --git a/target/classes/utility/NameBuilder.class b/target/classes/utility/NameBuilder.class index 00c9bdd..ba51c28 100644 Binary files a/target/classes/utility/NameBuilder.class and b/target/classes/utility/NameBuilder.class differ diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..bf43fe3 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,8 @@ +dto\Name.class +service\NameService.class +service\EmailService.class +com\example\midterm\MidtermApplication.class +utility\NameBuilder.class +com\example\midterm\ConcreteEmailService.class +dto\Email.class +com\example\midterm\ConcreteNameService.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..3187f64 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,9 @@ +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\com\example\midterm\ConcreteEmailService.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\com\example\midterm\ConcreteNameService.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\com\example\midterm\MidtermApplication.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\com\example\midterm\MyController.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\dto\Email.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\dto\Name.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\service\EmailService.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\service\NameService.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\main\java\utility\NameBuilder.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..f5af487 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1,2 @@ +com\example\midterm\MidtermApplicationTests.class +com\example\midterm\EmailValidationControllerTests.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e9ccbd2 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1,2 @@ +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\test\java\com\example\midterm\EmailValidationControllerTests.java +C:\Users\joren\Desktop\ENTJAVA\ENTJAVAMidterms\src\test\java\com\example\midterm\MidtermApplicationTests.java diff --git a/target/surefire-reports/TEST-com.example.midterm.EmailValidationControllerTests.xml b/target/surefire-reports/TEST-com.example.midterm.EmailValidationControllerTests.xml new file mode 100644 index 0000000..1f398ed --- /dev/null +++ b/target/surefire-reports/TEST-com.example.midterm.EmailValidationControllerTests.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/TEST-com.example.midterm.MidtermApplicationTests.xml b/target/surefire-reports/TEST-com.example.midterm.MidtermApplicationTests.xml new file mode 100644 index 0000000..90f233c --- /dev/null +++ b/target/surefire-reports/TEST-com.example.midterm.MidtermApplicationTests.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/com.example.midterm.EmailValidationControllerTests.txt b/target/surefire-reports/com.example.midterm.EmailValidationControllerTests.txt new file mode 100644 index 0000000..3290536 --- /dev/null +++ b/target/surefire-reports/com.example.midterm.EmailValidationControllerTests.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: com.example.midterm.EmailValidationControllerTests +------------------------------------------------------------------------------- +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.880 s -- in com.example.midterm.EmailValidationControllerTests diff --git a/target/surefire-reports/com.example.midterm.MidtermApplicationTests.txt b/target/surefire-reports/com.example.midterm.MidtermApplicationTests.txt new file mode 100644 index 0000000..09e446c --- /dev/null +++ b/target/surefire-reports/com.example.midterm.MidtermApplicationTests.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: com.example.midterm.MidtermApplicationTests +------------------------------------------------------------------------------- +Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 s -- in com.example.midterm.MidtermApplicationTests diff --git a/target/test-classes/com/example/midterm/EmailValidationControllerTests.class b/target/test-classes/com/example/midterm/EmailValidationControllerTests.class new file mode 100644 index 0000000..8d0d213 Binary files /dev/null and b/target/test-classes/com/example/midterm/EmailValidationControllerTests.class differ