From b55864340576a95f0d4dcbc89014ca30afef8955 Mon Sep 17 00:00:00 2001 From: Abdelbaki BEN ELHAJ SLIMENE Date: Wed, 24 Mar 2021 16:21:16 +0100 Subject: [PATCH] review changes --- .../pom.xml | 4 +-- .../java/org/library/ClassicsLibrary.java} | 13 ++++++-- .../META-INF/services/org.library.spi.Library | 1 + .../pom.xml | 4 +-- .../org/library/ComputerScienceLibrary.java} | 11 +++++-- .../META-INF/services/org.library.spi.Library | 1 + .../META-INF/services/org.library.spi.Library | 1 - .../{library-demo => library-client}/pom.xml | 31 +++++++++++++++---- .../main/java/org/library/LibraryClient.java | 22 +++++++++++++ .../main/java/org/library/LibraryDemo.java | 20 ------------ .../library-service-provider/pom.xml | 10 ++++++ .../main/java/org/library/LibraryService.java | 19 ++++++++++-- .../main/java/org/library/spi/Library.java | 1 + core-java/service-provider-interface/pom.xml | 6 ++-- .../META-INF/services/org.library.spi.Library | 1 - 15 files changed, 104 insertions(+), 41 deletions(-) rename core-java/service-provider-interface/{standard-library => classics-library}/pom.xml (92%) rename core-java/service-provider-interface/{standard-library/src/main/java/org/library/StandardLibrary.java => classics-library/src/main/java/org/library/ClassicsLibrary.java} (66%) create mode 100644 core-java/service-provider-interface/classics-library/src/main/resources/META-INF/services/org.library.spi.Library rename core-java/service-provider-interface/{custom-library => computer-science-library}/pom.xml (89%) rename core-java/service-provider-interface/{custom-library/src/main/java/org/library/CustomLibrary.java => computer-science-library/src/main/java/org/library/ComputerScienceLibrary.java} (76%) create mode 100644 core-java/service-provider-interface/computer-science-library/src/main/resources/META-INF/services/org.library.spi.Library delete mode 100644 core-java/service-provider-interface/custom-library/src/main/resources/META-INF/services/org.library.spi.Library rename core-java/service-provider-interface/{library-demo => library-client}/pom.xml (50%) create mode 100644 core-java/service-provider-interface/library-client/src/main/java/org/library/LibraryClient.java delete mode 100644 core-java/service-provider-interface/library-demo/src/main/java/org/library/LibraryDemo.java delete mode 100644 core-java/service-provider-interface/standard-library/src/main/resources/META-INF/services/org.library.spi.Library diff --git a/core-java/service-provider-interface/standard-library/pom.xml b/core-java/service-provider-interface/classics-library/pom.xml similarity index 92% rename from core-java/service-provider-interface/standard-library/pom.xml rename to core-java/service-provider-interface/classics-library/pom.xml index 143b32a..55fcd31 100644 --- a/core-java/service-provider-interface/standard-library/pom.xml +++ b/core-java/service-provider-interface/classics-library/pom.xml @@ -9,9 +9,9 @@ 4.0.0 - standard-library + classics-library - standard-library + classics-library UTF-8 diff --git a/core-java/service-provider-interface/standard-library/src/main/java/org/library/StandardLibrary.java b/core-java/service-provider-interface/classics-library/src/main/java/org/library/ClassicsLibrary.java similarity index 66% rename from core-java/service-provider-interface/standard-library/src/main/java/org/library/StandardLibrary.java rename to core-java/service-provider-interface/classics-library/src/main/java/org/library/ClassicsLibrary.java index 5d2b0e7..feb110e 100644 --- a/core-java/service-provider-interface/standard-library/src/main/java/org/library/StandardLibrary.java +++ b/core-java/service-provider-interface/classics-library/src/main/java/org/library/ClassicsLibrary.java @@ -6,20 +6,29 @@ import java.util.TreeMap; import org.library.spi.Book; import org.library.spi.Library; -public class StandardLibrary implements Library { +public class ClassicsLibrary implements Library { + public static final String CLASSICS_LIBRARY = "CLASSICS"; private final Map books; - public StandardLibrary() { + public ClassicsLibrary() { books = new TreeMap<>(); Book nineteenEightyFour = new Book("Nineteen Eighty-Four", "George Orwell", "It was a bright cold day in April, and the clocks were striking thirteen."); Book theLordOfTheRings = new Book("The Lord of the Rings", "J. R. R. Tolkien", "When Mr. Bilbo Baggins of Bag End announced that he would shortly be celebrating his " + "eleventy-first birthday with a party of special magnificence, there was much talk and excitement in Hobbiton."); + Book cleanCode = new Book("Clean Code", "Robert C. Martin", + "ClassicsEven bad code can function. But if code isn’t clean, it can bring a development organization to its knees"); books.put("Nineteen Eighty-Four", nineteenEightyFour); books.put("The Lord of the Rings", theLordOfTheRings); + books.put("Clean Code", cleanCode); + } + + @Override + public String getCategory() { + return CLASSICS_LIBRARY; } @Override diff --git a/core-java/service-provider-interface/classics-library/src/main/resources/META-INF/services/org.library.spi.Library b/core-java/service-provider-interface/classics-library/src/main/resources/META-INF/services/org.library.spi.Library new file mode 100644 index 0000000..08823fa --- /dev/null +++ b/core-java/service-provider-interface/classics-library/src/main/resources/META-INF/services/org.library.spi.Library @@ -0,0 +1 @@ +org.library.ClassicsLibrary diff --git a/core-java/service-provider-interface/custom-library/pom.xml b/core-java/service-provider-interface/computer-science-library/pom.xml similarity index 89% rename from core-java/service-provider-interface/custom-library/pom.xml rename to core-java/service-provider-interface/computer-science-library/pom.xml index aa007bf..14808e2 100644 --- a/core-java/service-provider-interface/custom-library/pom.xml +++ b/core-java/service-provider-interface/computer-science-library/pom.xml @@ -5,10 +5,10 @@ 4.0.0 org.library - custom-library + computer-science-library 1.0-SNAPSHOT - custom-library + computer-science-library UTF-8 diff --git a/core-java/service-provider-interface/custom-library/src/main/java/org/library/CustomLibrary.java b/core-java/service-provider-interface/computer-science-library/src/main/java/org/library/ComputerScienceLibrary.java similarity index 76% rename from core-java/service-provider-interface/custom-library/src/main/java/org/library/CustomLibrary.java rename to core-java/service-provider-interface/computer-science-library/src/main/java/org/library/ComputerScienceLibrary.java index cc9bd4b..dcf8b63 100644 --- a/core-java/service-provider-interface/custom-library/src/main/java/org/library/CustomLibrary.java +++ b/core-java/service-provider-interface/computer-science-library/src/main/java/org/library/ComputerScienceLibrary.java @@ -6,11 +6,13 @@ import java.util.TreeMap; import org.library.spi.Book; import org.library.spi.Library; -public class CustomLibrary implements Library { +public class ComputerScienceLibrary implements Library { + + public static final String COMPUTER_SCIENCE_LIBRARY = "COMPUTER_SCIENCE"; private final Map books; - public CustomLibrary() { + public ComputerScienceLibrary() { books = new TreeMap<>(); Book cleanCode = new Book("Clean Code", "Robert C. Martin", @@ -22,6 +24,11 @@ public class CustomLibrary implements Library { books.put(pragmaticProgrammer.getName(), pragmaticProgrammer); } + @Override + public String getCategory() { + return COMPUTER_SCIENCE_LIBRARY; + } + @Override public Book getBook(String name) { return books.get(name); diff --git a/core-java/service-provider-interface/computer-science-library/src/main/resources/META-INF/services/org.library.spi.Library b/core-java/service-provider-interface/computer-science-library/src/main/resources/META-INF/services/org.library.spi.Library new file mode 100644 index 0000000..e24f5e5 --- /dev/null +++ b/core-java/service-provider-interface/computer-science-library/src/main/resources/META-INF/services/org.library.spi.Library @@ -0,0 +1 @@ +org.library.ComputerScienceLibrary diff --git a/core-java/service-provider-interface/custom-library/src/main/resources/META-INF/services/org.library.spi.Library b/core-java/service-provider-interface/custom-library/src/main/resources/META-INF/services/org.library.spi.Library deleted file mode 100644 index 37ee10f..0000000 --- a/core-java/service-provider-interface/custom-library/src/main/resources/META-INF/services/org.library.spi.Library +++ /dev/null @@ -1 +0,0 @@ -org.library.CustomLibrary diff --git a/core-java/service-provider-interface/library-demo/pom.xml b/core-java/service-provider-interface/library-client/pom.xml similarity index 50% rename from core-java/service-provider-interface/library-demo/pom.xml rename to core-java/service-provider-interface/library-client/pom.xml index 8f100d6..2b18cc4 100644 --- a/core-java/service-provider-interface/library-demo/pom.xml +++ b/core-java/service-provider-interface/library-client/pom.xml @@ -9,28 +9,47 @@ 4.0.0 - library-demo + library-client - library-demo + library-client UTF-8 - 1.8 - 1.8 + 11 + 11 + org.library - standard-library + computer-science-library 1.0-SNAPSHOT org.library - custom-library + classics-library + 1.0-SNAPSHOT + + + org.library + library-service-provider 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 11 + 11 + + + + + diff --git a/core-java/service-provider-interface/library-client/src/main/java/org/library/LibraryClient.java b/core-java/service-provider-interface/library-client/src/main/java/org/library/LibraryClient.java new file mode 100644 index 0000000..8e009c3 --- /dev/null +++ b/core-java/service-provider-interface/library-client/src/main/java/org/library/LibraryClient.java @@ -0,0 +1,22 @@ +package org.library; + +public class LibraryClient { + public static void main(String[] args) { + LibraryService libraryService = LibraryService.getInstance(); + requestBook("Clean Code", libraryService); + requestBook("The Lord of the Rings", libraryService); + requestBook("The Lord of the Rings", "COMPUTER_SCIENCE", libraryService); + } + + private static void requestBook(String bookName, LibraryService library) { + library.getBook(bookName) + .ifPresentOrElse(book -> System.out.println("The book '" + bookName + "' was found, here are the details:" + book), + () -> System.out.println("The library doesn't have the book '" + bookName + "' that you need.")); + } + + private static void requestBook(String bookName,String category, LibraryService library) { + library.getBook(bookName, category) + .ifPresentOrElse(book -> System.out.println("The book '" + bookName + "' was found in " + category + ", here are the details:" + book), + () -> System.out.println("The library " + category + " doesn't have the book '" + bookName + "' that you need.")); + } +} diff --git a/core-java/service-provider-interface/library-demo/src/main/java/org/library/LibraryDemo.java b/core-java/service-provider-interface/library-demo/src/main/java/org/library/LibraryDemo.java deleted file mode 100644 index 9f131cb..0000000 --- a/core-java/service-provider-interface/library-demo/src/main/java/org/library/LibraryDemo.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.library; - -import org.library.spi.Book; - -public class LibraryDemo { - public static void main(String[] args) { - LibraryService libraryService = LibraryService.getInstance(); - manageBookRequest("Clean Code", libraryService); - manageBookRequest("The Lord of the Rings", libraryService); - } - - private static void manageBookRequest(String bookName, LibraryService library) { - Book book = library.getBook(bookName); - if (book == null) { - System.out.println("The library doesn't have the book '" + bookName + "' that you need."); - } else { - System.out.println("The book '" + bookName + "'was found, here are the details:" + book); - } - } -} diff --git a/core-java/service-provider-interface/library-service-provider/pom.xml b/core-java/service-provider-interface/library-service-provider/pom.xml index 228f73c..e021cdb 100644 --- a/core-java/service-provider-interface/library-service-provider/pom.xml +++ b/core-java/service-provider-interface/library-service-provider/pom.xml @@ -16,5 +16,15 @@ 1.8 + + + org.apache.maven.plugins + maven-compiler-plugin + + 9 + 9 + + + diff --git a/core-java/service-provider-interface/library-service-provider/src/main/java/org/library/LibraryService.java b/core-java/service-provider-interface/library-service-provider/src/main/java/org/library/LibraryService.java index eb1cd91..465ac26 100644 --- a/core-java/service-provider-interface/library-service-provider/src/main/java/org/library/LibraryService.java +++ b/core-java/service-provider-interface/library-service-provider/src/main/java/org/library/LibraryService.java @@ -1,6 +1,8 @@ package org.library; import java.util.Iterator; +import java.util.Objects; +import java.util.Optional; import java.util.ServiceLoader; import org.library.spi.Book; @@ -22,13 +24,26 @@ public class LibraryService { return libraryService; } - public Book getBook(String name) { + public void refresh() { + loader.reload(); + } + + public Optional getBook(String name) { Book book = null; Iterator libraries = loader.iterator(); while (book == null && libraries.hasNext()) { Library library = libraries.next(); book = library.getBook(name); } - return book; + return Optional.ofNullable(book); + } + + public Optional getBook(String name, String category) { + return loader.stream() + .map(ServiceLoader.Provider::get) + .filter(library -> library.getCategory().equals(category)) + .map(library -> library.getBook(name)) + .filter(Objects::nonNull) + .findFirst(); } } diff --git a/core-java/service-provider-interface/library-service-provider/src/main/java/org/library/spi/Library.java b/core-java/service-provider-interface/library-service-provider/src/main/java/org/library/spi/Library.java index 9bea86d..a3068ec 100644 --- a/core-java/service-provider-interface/library-service-provider/src/main/java/org/library/spi/Library.java +++ b/core-java/service-provider-interface/library-service-provider/src/main/java/org/library/spi/Library.java @@ -1,5 +1,6 @@ package org.library.spi; public interface Library { + String getCategory(); Book getBook(String name); } diff --git a/core-java/service-provider-interface/pom.xml b/core-java/service-provider-interface/pom.xml index 8b85719..25c7ae3 100644 --- a/core-java/service-provider-interface/pom.xml +++ b/core-java/service-provider-interface/pom.xml @@ -9,10 +9,10 @@ pom 1.0-SNAPSHOT - library-demo + library-client library-service-provider - standard-library - custom-library + classics-library + computer-science-library Library Service Provider Example diff --git a/core-java/service-provider-interface/standard-library/src/main/resources/META-INF/services/org.library.spi.Library b/core-java/service-provider-interface/standard-library/src/main/resources/META-INF/services/org.library.spi.Library deleted file mode 100644 index 587f111..0000000 --- a/core-java/service-provider-interface/standard-library/src/main/resources/META-INF/services/org.library.spi.Library +++ /dev/null @@ -1 +0,0 @@ -org.library.StandardLibrary