You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/09/11 04:07:04 UTC

[isis] branch master updated: ISIS-2870: adoc value-type: add memoization to generated html

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 84a1a22  ISIS-2870: adoc value-type: add memoization to generated html
84a1a22 is described below

commit 84a1a22006707e072035fcb1e56f2de701641471
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Sep 11 06:06:54 2021 +0200

    ISIS-2870: adoc value-type: add memoization to generated html
---
 .../asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java  | 10 +++---
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java | 41 +++++++++++-----------
 .../asciidoc/applib/value/Converter.java           |  7 +++-
 3 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java
index d19422e..60ab5a6 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.java
@@ -41,20 +41,20 @@ public final class AsciiDocJaxbAdapter extends XmlAdapter<String, AsciiDoc> {
     private final Base64.Decoder decoder = Base64.getDecoder(); // is thread-safe ?
 
     @Override
-    public AsciiDoc unmarshal(String v) throws Exception {
+    public AsciiDoc unmarshal(final String v) throws Exception {
         if(v==null) {
             return null;
         }
         final String adoc = _Strings.ofBytes(decoder.decode(v), StandardCharsets.UTF_8);
-        return new AsciiDoc(adoc);
+        return AsciiDoc.valueOfAdoc(adoc);
     }
 
     @Override
-    public String marshal(AsciiDoc v) throws Exception {
+    public String marshal(final AsciiDoc v) throws Exception {
         if(v==null) {
             return null;
         }
-        final String html = v.getAdoc();
-        return encoder.encodeToString(_Strings.toBytes(html, StandardCharsets.UTF_8));
+        final String adoc = v.getAdoc();
+        return encoder.encodeToString(_Strings.toBytes(adoc, StandardCharsets.UTF_8));
     }
 }
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
index e383d35..5c45a7e 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/AsciiDoc.java
@@ -19,6 +19,7 @@
 package org.apache.isis.valuetypes.asciidoc.applib.value;
 
 import java.io.Serializable;
+import java.util.Objects;
 
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -26,7 +27,10 @@ import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.value.HasHtml;
 import org.apache.isis.valuetypes.asciidoc.applib.jaxb.AsciiDocJaxbAdapter;
 
+import lombok.AccessLevel;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
+import lombok.experimental.Accessors;
 
 /**
  * Immutable value type holding pre-rendered HTML.
@@ -36,8 +40,9 @@ import lombok.Getter;
 @org.apache.isis.applib.annotation.Value(
         logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.AsciiDoc",
         semanticsProviderName = "org.apache.isis.valuetypes.asciidoc.metamodel.facets.AsciiDocValueSemanticsProvider")
+@EqualsAndHashCode
 @XmlJavaTypeAdapter(AsciiDocJaxbAdapter.class)  // for JAXB view model support
-public class AsciiDoc implements HasHtml, Serializable {
+public final class AsciiDoc implements HasHtml, Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -45,8 +50,16 @@ public class AsciiDoc implements HasHtml, Serializable {
         return new AsciiDoc(adoc);
     }
 
-    @Getter
-    private final String adoc;
+    public static AsciiDoc valueOfAdocAndHtml(final String adoc, final String html) {
+        return null;
+    }
+
+    @Getter private final String adoc;
+
+    @EqualsAndHashCode.Exclude
+    @Getter(lazy = true, value = AccessLevel.PRIVATE)
+    @Accessors(fluent = true)
+    private final String html = Converter.adocToHtml(getAdoc());
 
     public AsciiDoc() {
         this(null);
@@ -58,27 +71,11 @@ public class AsciiDoc implements HasHtml, Serializable {
 
     @Override
     public String asHtml() {
-        return Converter.adocToHtml(this.adoc);
+        return html();
     }
 
     public boolean isEqualTo(final AsciiDoc other) {
-        return other != null && this.adoc.equals(other.adoc);
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        return isEqualTo((AsciiDoc) obj);
-    }
-
-    @Override
-    public int hashCode() {
-        return adoc.hashCode();
+        return Objects.equals(this, other);
     }
 
     @Override
@@ -86,4 +83,6 @@ public class AsciiDoc implements HasHtml, Serializable {
         return "AsciiDoc[length="+ adoc.length()+"]";
     }
 
+
+
 }
diff --git a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/Converter.java b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/Converter.java
index 3a06410..366be92 100644
--- a/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/Converter.java
+++ b/valuetypes/asciidoc/applib/src/main/java/org/apache/isis/valuetypes/asciidoc/applib/value/Converter.java
@@ -61,7 +61,7 @@ final class Converter {
     public static String adocToHtml(final @Nullable String adoc, final @Nullable Options options) {
         return _Strings.isEmpty(adoc)
                 ? ""
-                : getAsciidoctor().convert(adoc,
+                : convert(adoc,
                     Optional
                     .ofNullable(options)
                     .orElseGet(Converter::getDefaultOptions));
@@ -76,6 +76,11 @@ final class Converter {
 
     // -- HELPER
 
+    private static String convert(final String content, final Options options) {
+        return getAsciidoctor()
+            .convert(content, options);
+    }
+
     @Getter(lazy = true)
     private final static Asciidoctor asciidoctor = Asciidoctor.Factory.create();