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();