This is an automated email from the ASF dual-hosted git repository. riemer pushed a commit to branch support-dynamic-assets-maven-plugin in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit c6b475bba956ada4c7ef27a0a4815ebeacb61ec0 Author: Dominik Riemer <[email protected]> AuthorDate: Wed Oct 9 22:27:09 2024 +0200 fix: Support dynamic assets in Maven plugin to generate docs --- .../extensions/api/assets/AssetResolver.java | 14 ++++++++-- .../api/assets/DefaultAssetResolver.java | 17 ++++++------ .../generic/assets/PlcAdapterAssetResolver.java | 12 ++++---- .../streampipes-extensions-all-jvm/pom.xml | 20 ++++++++++++++ .../smp/extractor/ExtensionsFinder.java | 32 ++++++++++++---------- .../smp/extractor/LocalesExtractor.java | 10 ++++++- .../smp/generator/ResourceGenerator.java | 11 ++++++-- .../apache/streampipes/smp/model/AssetModel.java | 12 ++++++++ 8 files changed, 96 insertions(+), 32 deletions(-) diff --git a/streampipes-extensions-api/src/main/java/org/apache/streampipes/extensions/api/assets/AssetResolver.java b/streampipes-extensions-api/src/main/java/org/apache/streampipes/extensions/api/assets/AssetResolver.java index 16006e631b..c032168647 100644 --- a/streampipes-extensions-api/src/main/java/org/apache/streampipes/extensions/api/assets/AssetResolver.java +++ b/streampipes-extensions-api/src/main/java/org/apache/streampipes/extensions/api/assets/AssetResolver.java @@ -23,8 +23,18 @@ import java.util.Properties; public interface AssetResolver { - byte[] getAsset(String assetName) throws IOException; + default byte[] getAsset(String assetName) throws IOException { + return getAsset(this.getClass().getClassLoader(), assetName); + } - Properties getLocale(String localeName) throws IOException; + default Properties getLocale(String localeName) throws IOException { + return getLocale(this.getClass().getClassLoader(), localeName); + } + + byte[] getAsset(ClassLoader classLoader, + String assetName) throws IOException; + + Properties getLocale(ClassLoader classLoader, + String localeName) throws IOException; } diff --git a/streampipes-extensions-api/src/main/java/org/apache/streampipes/extensions/api/assets/DefaultAssetResolver.java b/streampipes-extensions-api/src/main/java/org/apache/streampipes/extensions/api/assets/DefaultAssetResolver.java index 61b3f067d3..8449a9451b 100644 --- a/streampipes-extensions-api/src/main/java/org/apache/streampipes/extensions/api/assets/DefaultAssetResolver.java +++ b/streampipes-extensions-api/src/main/java/org/apache/streampipes/extensions/api/assets/DefaultAssetResolver.java @@ -34,23 +34,24 @@ public class DefaultAssetResolver implements AssetResolver { } @Override - public byte[] getAsset(String assetName) throws IOException { - return getResourceFile(assetName).readAllBytes(); + public byte[] getAsset(ClassLoader classLoader, + String assetName) throws IOException { + return getResourceFile(classLoader, assetName).readAllBytes(); } @Override - public Properties getLocale(String localeName) throws IOException { + public Properties getLocale(ClassLoader classLoader, + String localeName) throws IOException { Properties props = new Properties(); - props.load(new InputStreamReader(getResourceFile(localeName), StandardCharsets.UTF_8)); + props.load(new InputStreamReader(getResourceFile(classLoader, localeName), StandardCharsets.UTF_8)); return props; } - protected InputStream getResourceFile(String filename) throws IOException { + protected InputStream getResourceFile(ClassLoader classLoader, + String filename) throws IOException { if (existsFile(filename)) { var path = makePath(filename); - return this.getClass() - .getClassLoader() - .getResourceAsStream(path); + return classLoader.getResourceAsStream(path); } else { throw new IOException(String.format("Could not read file %s", filename)); } diff --git a/streampipes-extensions/streampipes-connectors-plc/src/main/java/org/apache/streampipes/extensions/connectors/plc/adapter/generic/assets/PlcAdapterAssetResolver.java b/streampipes-extensions/streampipes-connectors-plc/src/main/java/org/apache/streampipes/extensions/connectors/plc/adapter/generic/assets/PlcAdapterAssetResolver.java index f104007906..a8b02834f2 100644 --- a/streampipes-extensions/streampipes-connectors-plc/src/main/java/org/apache/streampipes/extensions/connectors/plc/adapter/generic/assets/PlcAdapterAssetResolver.java +++ b/streampipes-extensions/streampipes-connectors-plc/src/main/java/org/apache/streampipes/extensions/connectors/plc/adapter/generic/assets/PlcAdapterAssetResolver.java @@ -40,8 +40,9 @@ public class PlcAdapterAssetResolver extends DefaultAssetResolver { } @Override - public Properties getLocale(String localeName) throws IOException { - var properties = super.getLocale(localeName); + public Properties getLocale(ClassLoader classLoader, + String localeName) throws IOException { + var properties = super.getLocale(classLoader, localeName); properties.put(appId + ".title", driver.getProtocolName()); properties.put(appId + ".description", ""); @@ -49,12 +50,13 @@ public class PlcAdapterAssetResolver extends DefaultAssetResolver { } @Override - public byte[] getAsset(String assetName) throws IOException { + public byte[] getAsset(ClassLoader classLoader, + String assetName) throws IOException { if (assetName.equals(GlobalStreamPipesConstants.STD_DOCUMENTATION_NAME)) { - var docsTemplate = new String(getResourceFile(assetName).readAllBytes()); + var docsTemplate = new String(getResourceFile(classLoader, assetName).readAllBytes()); return new DocumentationGenerator(driver, docsTemplate).generateDocumentation(); } else { - return super.getAsset(assetName); + return super.getAsset(classLoader, assetName); } } } diff --git a/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml b/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml index c3867b86c1..88cede6913 100644 --- a/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml +++ b/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml @@ -270,6 +270,26 @@ <artifactId>rocketmq-client-java</artifactId> <version>5.0.2</version> </dependency> + <dependency> + <groupId>org.apache.plc4x</groupId> + <artifactId>plc4j-driver-all</artifactId> + <version>0.12.0</version> + <type>pom</type> + <exclusions> + <exclusion> + <groupId>org.apache.plc4x</groupId> + <artifactId>plc4j-driver-firmata</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.plc4x</groupId> + <artifactId>plc4j-driver-opcua</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.plc4x</groupId> + <artifactId>plc4j-driver-c-bus</artifactId> + </exclusion> + </exclusions> + </dependency> </dependencies> <configuration> <initClass>org.apache.streampipes.extensions.all.jvm.AllExtensionsInit</initClass> diff --git a/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/extractor/ExtensionsFinder.java b/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/extractor/ExtensionsFinder.java index c1ac981bb4..1fa3c01a42 100644 --- a/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/extractor/ExtensionsFinder.java +++ b/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/extractor/ExtensionsFinder.java @@ -49,7 +49,7 @@ public class ExtensionsFinder { public List<AssetModel> findExtensions() throws MalformedURLException, DependencyResolutionRequiredException, ClassNotFoundException, - InstantiationException, IllegalAccessException { + InstantiationException, IllegalAccessException { var extensions = new ArrayList<AssetModel>(); var serviceDef = ( (StreamPipesExtensionsServiceBase) loader @@ -70,22 +70,26 @@ public class ExtensionsFinder { PeType peType ) { return serviceDef.getDeclarers() - .stream() - .map(IStreamPipesPipelineElement::declareConfig) - .filter(configType::isInstance) - .map(config -> new AssetModel(config.getDescription() - .getAppId(), peType)) - .toList(); + .stream() + .map(IStreamPipesPipelineElement::declareConfig) + .filter(configType::isInstance) + .map(config -> new AssetModel(config.getDescription() + .getAppId(), peType)) + .toList(); } private Collection<? extends AssetModel> findAdapters(SpServiceDefinition serviceDef) { return serviceDef.getAdapters() - .stream() - .map(adapter -> { - var config = adapter.declareConfig(); - return new AssetModel(config.getAdapterDescription() - .getAppId(), PeType.ADAPTER); - }) - .toList(); + .stream() + .map(adapter -> { + var config = adapter.declareConfig(); + var resolver = config.getAssetResolver(); + return new AssetModel( + config.getAdapterDescription().getAppId(), + PeType.ADAPTER, + resolver + ); + }) + .toList(); } } diff --git a/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/extractor/LocalesExtractor.java b/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/extractor/LocalesExtractor.java index 7688c2e64f..49e58707ce 100644 --- a/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/extractor/LocalesExtractor.java +++ b/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/extractor/LocalesExtractor.java @@ -18,6 +18,7 @@ package org.apache.streampipes.smp.extractor; +import org.apache.streampipes.extensions.api.assets.DefaultAssetResolver; import org.apache.streampipes.smp.model.AssetModel; import org.apache.maven.plugin.logging.Log; @@ -45,7 +46,14 @@ public class LocalesExtractor { public void applyLocales(AssetModel assetModel) { var localeFile = loader.getResourceAsStream(assetModel.getAppId() + "/" + LOCALES_FILE_EN); try { - var props = loadProperties(localeFile); + Properties props; + if (assetModel.getAssetResolver() != null + && !(assetModel.getAssetResolver().getClass() == DefaultAssetResolver.class)) { + props = assetModel.getAssetResolver().getLocale(loader, LOCALES_FILE_EN); + } else { + props = loadProperties(localeFile); + } + assetModel.setPipelineElementName(extractKey(props, assetModel, TITLE)); assetModel.setPipelineElementDescription(extractKey(props, assetModel, DESCRIPTION)); } catch (IOException e) { diff --git a/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/generator/ResourceGenerator.java b/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/generator/ResourceGenerator.java index 9816ed785d..d21984773e 100644 --- a/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/generator/ResourceGenerator.java +++ b/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/generator/ResourceGenerator.java @@ -18,8 +18,10 @@ package org.apache.streampipes.smp.generator; +import org.apache.streampipes.extensions.api.assets.DefaultAssetResolver; import org.apache.streampipes.smp.model.AssetModel; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Path; @@ -38,8 +40,13 @@ public abstract class ResourceGenerator { this.targetPath = targetPath; } - protected InputStream getResourceInputStream(String resourceName) { - return loader.getResourceAsStream(extensionsElement.getAppId() + "/" + resourceName); + protected InputStream getResourceInputStream(String resourceName) throws IOException { + if (extensionsElement.getAssetResolver() != null + && !(extensionsElement.getAssetResolver().getClass() == DefaultAssetResolver.class)) { + return new ByteArrayInputStream(extensionsElement.getAssetResolver().getAsset(loader, resourceName)); + } else { + return loader.getResourceAsStream(extensionsElement.getAppId() + "/" + resourceName); + } } public abstract void generate() throws IOException; diff --git a/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/model/AssetModel.java b/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/model/AssetModel.java index ecb77de77b..96dfef8282 100644 --- a/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/model/AssetModel.java +++ b/streampipes-maven-plugin/src/main/java/org/apache/streampipes/smp/model/AssetModel.java @@ -18,6 +18,7 @@ package org.apache.streampipes.smp.model; +import org.apache.streampipes.extensions.api.assets.AssetResolver; import org.apache.streampipes.smp.constants.PeType; public class AssetModel implements Comparable<AssetModel> { @@ -26,11 +27,18 @@ public class AssetModel implements Comparable<AssetModel> { private String pipelineElementName; private String pipelineElementDescription; private PeType peType = PeType.PROCESSOR; + private AssetResolver assetResolver; public AssetModel() { } + public AssetModel(String appId, PeType peType, AssetResolver resolver) { + this.appId = appId; + this.peType = peType; + this.assetResolver = resolver; + } + public AssetModel(String appId, PeType peType) { this.appId = appId; this.peType = peType; @@ -63,6 +71,10 @@ public class AssetModel implements Comparable<AssetModel> { this.pipelineElementDescription = pipelineElementDescription; } + public AssetResolver getAssetResolver() { + return assetResolver; + } + public PeType getPeType() { return peType; }
