This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-slingstart-maven-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new 6fef2c2 SLING-9725 : Better support for text extensions
6fef2c2 is described below
commit 6fef2c2a46cdea332d72d4c124da71208ea3176a
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Thu Oct 1 10:17:14 2020 +0200
SLING-9725 : Better support for text extensions
---
.gitignore | 2 ++
.../maven/slingstart/FeatureModelConverter.java | 11 +++++++
.../sling/maven/slingstart/JSONFeatures.java | 35 ++++++++++++++++++++++
3 files changed, 48 insertions(+)
diff --git a/.gitignore b/.gitignore
index 5b783ed..9e14b0a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,5 +13,7 @@ maven-eclipse.xml
*.bak
.vlt
.DS_Store
+.factorypath
+.vscode
jcr.log
atlassian-ide-plugin.xml
diff --git
a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
index 76a9174..c627b15 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
@@ -146,6 +146,17 @@ public class FeatureModelConverter {
}
String json = readFeatureFile(project, f,
suggestedClassifier);
+ // handle extensions
+ try (final Reader reader = new StringReader(json)) {
+ final Feature feature = FeatureJSONReader.read(reader,
f.getAbsolutePath());
+ JSONFeatures.handleExtensions(feature, f);
+ try (final Writer writer = new StringWriter()) {
+ FeatureJSONWriter.write(writer, feature);
+ writer.flush();
+ json = writer.toString();
+ }
+ }
+
// check for prov model name
if (defaultProvName != null || featureFile.runModes !=
null || featureFile.model != null) {
try (final Reader reader = new StringReader(json)) {
diff --git a/src/main/java/org/apache/sling/maven/slingstart/JSONFeatures.java
b/src/main/java/org/apache/sling/maven/slingstart/JSONFeatures.java
index c3624b1..0dcc204 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/JSONFeatures.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/JSONFeatures.java
@@ -16,9 +16,11 @@
*/
package org.apache.sling.maven.slingstart;
+import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
import java.util.Map;
import javax.json.Json;
@@ -29,8 +31,12 @@ import javax.json.JsonReader;
import javax.json.JsonValue;
import javax.json.JsonWriter;
+import org.apache.commons.io.FileUtils;
import org.apache.felix.cm.json.Configurations;
import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionType;
+import org.apache.sling.feature.Feature;
public class JSONFeatures {
@@ -66,4 +72,33 @@ public class JSONFeatures {
return writer.toString();
}
}
+
+ private static final String FILE_PREFIX = "@file";
+
+ /**
+ * Check for extensions of type text and if they reference a file
+ */
+ public static void handleExtensions(final Feature feature, final File
file) throws IOException {
+ for(final Extension ext : feature.getExtensions()) {
+ if ( ext.getType() == ExtensionType.TEXT &&
ext.getText().startsWith(FILE_PREFIX)) {
+ final int pos = file.getName().lastIndexOf(".");
+ final String baseName = pos == -1 ? file.getName() :
file.getName().substring(0, pos);
+ final String fileName;
+ if ( FILE_PREFIX.equals(ext.getText()) ) {
+ fileName =
baseName.concat("-").concat(ext.getName()).concat(".txt");
+ } else {
+ if (
!ext.getText().substring(FILE_PREFIX.length()).startsWith(":") ) {
+ throw new IOException("Invalid file reference: " +
ext.getText());
+ }
+ fileName =
baseName.concat("-").concat(ext.getText().substring(FILE_PREFIX.length() + 1));
+ }
+ final File txtFile = new File(file.getParentFile(), fileName);
+ if ( !txtFile.exists() || !txtFile.isFile()) {
+ throw new IOException("Extension text file " +
txtFile.getAbsolutePath() + " not found.");
+ }
+ final String contents = FileUtils.readFileToString(txtFile,
StandardCharsets.UTF_8);
+ ext.setText(contents);
+ }
+ }
+ }
}