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);
+            }
+        }
+    }
 }

Reply via email to