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/05 16:30:12 UTC
svn commit: r1868030 - in /ofbiz/ofbiz-framework/trunk/framework:
base/src/main/java/org/apache/ofbiz/base/component/
base/src/main/java/org/apache/ofbiz/base/container/
webtools/src/main/java/org/apache/ofbiz/webtools/labelmanager/
Author: mthl
Date: Sat Oct 5 16:30:12 2019
New Revision: 1868030
URL: http://svn.apache.org/viewvc?rev=1868030&view=rev
Log:
Improved: Refactor ‘ComponentConfig.ClasspathInfo’
(OFBIZ-11192)(OFBIZ-11238)
The validity checks have been moved at construction time instead of
relying on client code to ensure that the class path information are
sound.
A new ‘ComponentConfig.ClasspathInfo.Type’ enum has been defined to
improve type safety.
The location of the class path information is now using a
‘java.nio.file.Path’ class instance.
Modified:
ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/component/ComponentConfig.java
ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/Classpath.java
ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/ComponentContainer.java
ofbiz/ofbiz-framework/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/labelmanager/LabelManagerFactory.java
Modified: ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/component/ComponentConfig.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/component/ComponentConfig.java?rev=1868030&r1=1868029&r2=1868030&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/component/ComponentConfig.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/component/ComponentConfig.java Sat Oct 5 16:30:12 2019
@@ -287,7 +287,7 @@ public final class ComponentConfig {
this.componentName = b.componentName;
this.enabled = b.enabled;
this.resourceLoaderInfos = b.resourceLoaderInfos;
- this.classpathInfos = b.classpathInfos;
+ this.classpathInfos = (b.classpathInfos == null) ? Collections.emptyList() : b.classpathInfos;
this.dependsOnInfos = (b.dependsOnInfos == null) ? Collections.emptyList() : b.dependsOnInfos;
this.entityResourceInfos = b.entityResourceInfos;
this.serviceResourceInfos = b.serviceResourceInfos;
@@ -452,7 +452,14 @@ public final class ComponentConfig {
private <T> List<T> collectElements(Element ofbizComponentElement, String elemName,
BiFunction<ComponentConfig, Element, T> mapper) {
return UtilXml.childElementList(ofbizComponentElement, elemName).stream()
- .map(element -> mapper.apply(this, element))
+ .flatMap(element -> {
+ try {
+ return Stream.of(mapper.apply(this, element));
+ } catch(IllegalArgumentException e) {
+ Debug.log(e.getMessage());
+ return Stream.empty();
+ }
+ })
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
}
@@ -460,6 +467,11 @@ public final class ComponentConfig {
return this.enabled;
}
+ /**
+ * Provides the list of class path information.
+ *
+ * @return an immutable list containing the class path information.
+ */
public List<ClasspathInfo> getClasspathInfos() {
return this.classpathInfos;
}
@@ -610,14 +622,57 @@ public final class ComponentConfig {
*
*/
public static final class ClasspathInfo {
- public final ComponentConfig componentConfig;
- public final String type;
- public final String location;
+ private final ComponentConfig componentConfig;
+ private final Type type;
+ private final Path location;
private ClasspathInfo(ComponentConfig componentConfig, Element element) {
+ String loc = element.getAttribute("location").replace('\\', '/');
+ Path location = Paths.get(loc.startsWith("/") ? loc.substring(1) : loc).normalize();
+ Path fullLocation = componentConfig.rootLocation().resolve(location);
+ Type type = Type.of(element.getAttribute("type"));
+ switch (type) {
+ case DIR:
+ if (!Files.isDirectory(fullLocation)) {
+ String msg = String.format("Classpath location '%s' is not a valid directory", location);
+ throw new IllegalArgumentException(msg);
+ }
+ break;
+ case JAR:
+ if (Files.notExists(fullLocation)) {
+ String msg = String.format("Classpath location '%s' does not exist", location);
+ throw new IllegalArgumentException(msg);
+ }
+ break;
+ }
+
this.componentConfig = componentConfig;
- this.type = element.getAttribute("type");
- this.location = element.getAttribute("location");
+ this.type = type;
+ this.location = location;
+ }
+
+ public ComponentConfig componentConfig() {
+ return componentConfig;
+ }
+
+ public Type type() {
+ return type;
+ }
+
+ public Path location() {
+ return componentConfig.rootLocation().resolve(location);
+ }
+
+ public static enum Type {
+ DIR, JAR;
+
+ private static Type of(String type) {
+ if ("jar".equals(type) || "dir".equals(type)) {
+ return valueOf(type.toUpperCase());
+ } else {
+ throw new IllegalArgumentException("Classpath type '" + type + "' is not supported; '");
+ }
+ }
}
}
Modified: ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/Classpath.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/Classpath.java?rev=1868030&r1=1868029&r2=1868030&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/Classpath.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/container/Classpath.java Sat Oct 5 16:30:12 2019
@@ -30,6 +30,8 @@ import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.ofbiz.base.component.ComponentConfig.ClasspathInfo;
+
/**
* A class path object.
*
@@ -48,19 +50,24 @@ final class Classpath {
* In the directory case, all files ending with ".jar" or ".zip" inside this directory
* are added to the class path.
*
- * @param file the absolute normalized file name of a directory or a file that must exist
- * @param type either "dir" or "jar"
- * @throws NullPointerException when {@code file} is {@code null}.
+ * @param cpi a valid class path information
+ * @throws NullPointerException when {@code cpi} is {@code null}.
*/
- void add(Path file, String type) {
- elements.add(file);
- if (Files.isDirectory(file) && "dir".equals(type)) {
+ void add(ClasspathInfo cpi) {
+ Path file = cpi.location();
+ switch (cpi.type()) {
+ case JAR:
+ elements.add(file);
+ break;
+ case DIR:
+ elements.add(file);
try (Stream<Path> innerFiles = Files.list(file)) {
innerFiles.filter(JAR_ZIP_FILES::matches).forEach(elements::add);
} catch (IOException e) {
String fmt = "Warning : Module classpath component '%s' is not valid and will be ignored...";
System.err.println(String.format(fmt, file));
}
+ break;
}
}
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=1868030&r1=1868029&r2=1868030&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 Sat Oct 5 16:30:12 2019
@@ -325,35 +325,16 @@ public class ComponentContainer implemen
}
/**
- * Construct a <code>Classpath</code> object for a certain component based
- * on its configuration defined in <code>ComponentConfig</code>
+ * Constructs a {@code Classpath} object for a specific component definition.
*
- * @param config the component configuration
- * @return the constructed classpath
- * @throws IOException
+ * @param config the component configuration
+ * @return the associated class path information
+ * @see ComponentConfig
*/
- private static Classpath buildClasspathFromComponentConfig(ComponentConfig config) throws IOException {
- Classpath classPath = new Classpath();
- Path configRoot = config.rootLocation();
- List<ComponentConfig.ClasspathInfo> classpathInfos = config.getClasspathInfos();
-
- for (ComponentConfig.ClasspathInfo cp: classpathInfos) {
- String location = cp.location.replace('\\', '/');
- if (!"jar".equals(cp.type) && !"dir".equals(cp.type)) {
- Debug.logError("Classpath type '" + cp.type + "' is not supported; '" + location + "' not loaded", module);
- continue;
- }
-
- location = location.startsWith("/") ? location.substring(1) : location;
- String dirLoc = location.endsWith("/*") ? location.substring(0, location.length() - 2) : location;
- Path path = configRoot.resolve(dirLoc).normalize();
- if (Files.exists(path)) {
- classPath.add(path, cp.type);
- } else {
- Debug.logWarning("Location '" + path + "' does not exist", module);
- }
- }
- return classPath;
+ private static Classpath buildClasspathFromComponentConfig(ComponentConfig config) {
+ Classpath res = new Classpath();
+ config.getClasspathInfos().forEach(res::add);
+ return res;
}
@Override
@@ -364,5 +345,4 @@ public class ComponentContainer implemen
public String getName() {
return name;
}
-
}
Modified: ofbiz/ofbiz-framework/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/labelmanager/LabelManagerFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/labelmanager/LabelManagerFactory.java?rev=1868030&r1=1868029&r2=1868030&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/labelmanager/LabelManagerFactory.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/labelmanager/LabelManagerFactory.java Sat Oct 5 16:30:12 2019
@@ -21,7 +21,6 @@ package org.apache.ofbiz.webtools.labelm
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
-import java.nio.file.Path;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
@@ -84,16 +83,11 @@ public class LabelManagerFactory {
filesFound = new TreeMap<>();
List<ClasspathInfo> cpInfos = ComponentConfig.getAllClasspathInfos();
for (ClasspathInfo cpi : cpInfos) {
- if ("dir".equals(cpi.type)) {
- Path configRoot = cpi.componentConfig.rootLocation();
- String location = cpi.location.replace('\\', '/');
- if (location.startsWith("/")) {
- location = location.substring(1);
- }
- Path fullLocation = configRoot.resolve(location);
- List<File> resourceFiles = FileUtil.findXmlFiles(fullLocation.toString(), null, "resource", null);
+ if (ClasspathInfo.Type.DIR == cpi.type()) {
+ List<File> resourceFiles = FileUtil.findXmlFiles(cpi.location().toString(), null, "resource", null);
for (File resourceFile : resourceFiles) {
- filesFound.put(resourceFile.getName(), new LabelFile(resourceFile, cpi.componentConfig.getComponentName()));
+ filesFound.put(resourceFile.getName(),
+ new LabelFile(resourceFile, cpi.componentConfig().getComponentName()));
}
}
}