You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by mt...@apache.org on 2019/10/30 15:41:30 UTC

svn commit: r1869183 - /ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java

Author: mthl
Date: Wed Oct 30 15:41:29 2019
New Revision: 1869183

URL: http://svn.apache.org/viewvc?rev=1869183&view=rev
Log:
Improved: Rewrite ‘ComponentContainer#loadComponentsInDirectory’
(OFBIZ-11264)

Use a more declarative style with the stream API.

Modified:
    ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java

Modified: ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java?rev=1869183&r1=1869182&r2=1869183&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java Wed Oct 30 15:41:29 2019
@@ -26,15 +26,16 @@ import java.net.URLClassLoader;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.ofbiz.base.component.ComponentConfig;
 import org.apache.ofbiz.base.component.ComponentConfig.DependsOnInfo;
@@ -193,29 +194,22 @@ public class ComponentContainer implemen
      * a load-components.xml file. The components are sorted alphabetically
      * for loading purposes
      *
-     * @param directoryPath the absolute path of the directory
+     * @param directoryPath a valid absolute path of a component directory
      * @throws IOException
      * @throws ComponentException
      */
     private void loadComponentsInDirectory(Path directoryPath) throws IOException, ComponentException {
-        List<Path> sortedComponentNames = Files.list(directoryPath).collect(Collectors.toList());
-        List<ComponentConfig> componentConfigs = new ArrayList<>();
-        if (sortedComponentNames == null) {
-            throw new IllegalArgumentException("sortedComponentNames is null, directory path is invalid " + directoryPath);
-        }
-        Collections.sort(sortedComponentNames);
-
-        for (Path componentName: sortedComponentNames) {
-            Path componentDir = directoryPath.resolve(componentName).toAbsolutePath().normalize();
-            Path configFile = componentDir.resolve(ComponentConfig.OFBIZ_COMPONENT_XML_FILENAME);
-            if (Files.isDirectory(componentDir) && Files.exists(configFile)) {
-                ComponentConfig config = retrieveComponentConfig(null, componentDir);
-                componentConfigs.add(config);
-            }
-        }
-        for (ComponentConfig componentConfig : componentConfigs) {
-            if (componentConfig != null) {
-                loadSingleComponent(componentConfig);
+        try (Stream<Path> paths = Files.list(directoryPath)) {
+            List<ComponentConfig> componentConfigs = paths.sorted()
+                    .map(cmpnt -> directoryPath.resolve(cmpnt).toAbsolutePath().normalize())
+                    .filter(Files::isDirectory)
+                    .filter(dir -> Files.exists(dir.resolve(ComponentConfig.OFBIZ_COMPONENT_XML_FILENAME)))
+                    .map(componentDir -> retrieveComponentConfig(null, componentDir))
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toList());
+
+            for (ComponentConfig cmpnt : componentConfigs) {
+                loadSingleComponent(cmpnt);
             }
         }
         loadComponentWithDependency();