From 3ba9ceb3615f93299e4bf879059d4c51c77aa28b Mon Sep 17 00:00:00 2001 From: Stefan Seifert Date: Fri, 19 Jan 2024 14:52:48 +0100 Subject: [PATCH] Remove generic from HtmlElement (#3) --- changes.xml | 3 + .../handler/commons/dom/AbstractElement.java | 19 +++--- .../dom/AbstractHtmlElementFactory.java | 45 +++++++------ .../AbstractNonSelfClosingHtmlElement.java | 3 +- .../io/wcm/handler/commons/dom/Anchor.java | 54 ++++++++++++++- .../java/io/wcm/handler/commons/dom/Area.java | 54 ++++++++++++++- .../io/wcm/handler/commons/dom/Audio.java | 54 ++++++++++++++- .../java/io/wcm/handler/commons/dom/Div.java | 54 ++++++++++++++- .../wcm/handler/commons/dom/FigCaption.java | 54 ++++++++++++++- .../io/wcm/handler/commons/dom/Figure.java | 54 ++++++++++++++- .../wcm/handler/commons/dom/HtmlElement.java | 43 +++++------- .../io/wcm/handler/commons/dom/Image.java | 54 ++++++++++++++- .../java/io/wcm/handler/commons/dom/Map.java | 54 ++++++++++++++- .../io/wcm/handler/commons/dom/NoScript.java | 54 ++++++++++++++- .../io/wcm/handler/commons/dom/Picture.java | 54 ++++++++++++++- .../io/wcm/handler/commons/dom/Script.java | 49 +++++++++++++- .../io/wcm/handler/commons/dom/Source.java | 54 ++++++++++++++- .../java/io/wcm/handler/commons/dom/Span.java | 54 ++++++++++++++- .../io/wcm/handler/commons/dom/Video.java | 54 ++++++++++++++- .../wcm/handler/commons/dom/AnchorTest.java | 6 ++ .../io/wcm/handler/commons/dom/AreaTest.java | 6 ++ .../io/wcm/handler/commons/dom/AudioTest.java | 6 ++ .../io/wcm/handler/commons/dom/DivTest.java | 6 ++ .../handler/commons/dom/FigCaptionTest.java | 6 ++ .../wcm/handler/commons/dom/FigureTest.java | 6 ++ .../handler/commons/dom/HtmlElementTest.java | 2 +- .../io/wcm/handler/commons/dom/ImageTest.java | 6 ++ .../io/wcm/handler/commons/dom/MapTest.java | 6 ++ .../wcm/handler/commons/dom/NoScriptTest.java | 6 ++ .../wcm/handler/commons/dom/PictureTest.java | 6 ++ .../wcm/handler/commons/dom/ScriptTest.java | 6 ++ .../wcm/handler/commons/dom/SourceTest.java | 6 ++ .../io/wcm/handler/commons/dom/SpanTest.java | 6 ++ .../io/wcm/handler/commons/dom/TestUtil.java | 66 +++++++++++++++++++ .../io/wcm/handler/commons/dom/VideoTest.java | 6 ++ 35 files changed, 940 insertions(+), 76 deletions(-) create mode 100644 src/test/java/io/wcm/handler/commons/dom/TestUtil.java diff --git a/changes.xml b/changes.xml index a5cabbb..8be3b87 100644 --- a/changes.xml +++ b/changes.xml @@ -27,6 +27,9 @@ Remove deprecated functionality. + + DOM: Remove generic from HtmlElement class. + Switch to AEM 6.5.17 as minimum version. diff --git a/src/main/java/io/wcm/handler/commons/dom/AbstractElement.java b/src/main/java/io/wcm/handler/commons/dom/AbstractElement.java index e1f9dcb..44e2ac1 100644 --- a/src/main/java/io/wcm/handler/commons/dom/AbstractElement.java +++ b/src/main/java/io/wcm/handler/commons/dom/AbstractElement.java @@ -33,11 +33,10 @@ /** * Generic DOM element. * This element implementation is derived from JDOM element implementation. - * @param Class extending Element */ @SuppressWarnings("unchecked") @ConsumerType -public abstract class AbstractElement extends org.jdom2.Element { +public abstract class AbstractElement extends org.jdom2.Element { private static final long serialVersionUID = 1L; // matches all control chars ([\x00-\x1F\x7F]), that are invalid inside XML @@ -77,9 +76,9 @@ public final int getAttributeValueAsInteger(String attributeName) { * @param value Attribute value as long * @return Self reference */ - public final T setAttributeValueAsLong(String name, long value) { + public AbstractElement setAttributeValueAsLong(String name, long value) { setAttribute(name, Long.toString(value)); - return (T)this; + return this; } /** @@ -108,9 +107,9 @@ public final long getAttributeValueAsLong(String attributeName) { * @param value Attribute value as integer * @return Self reference */ - public final T setAttributeValueAsInteger(String name, int value) { + public final AbstractElement setAttributeValueAsInteger(String name, int value) { setAttribute(name, Integer.toString(value)); - return (T)this; + return this; } /** @@ -190,11 +189,11 @@ public final org.jdom2.Element addContent(int index, Collection collection) { /** * Appends the child to the end of the element's content list. * Returns not the element itself (contrary to addContent), but a reference to the newly added element. - * @param Type that extends Element + * @param Type that extends Element * @param element Element to add. Null values are ignored. * @return The added element. */ - public final ElementType add(ElementType element) { + public final T add(T element) { this.addContent(element); return element; } @@ -281,14 +280,14 @@ private String cleanUpString(String text) { } @Override - public String toString() { + public final String toString() { return new XMLOutputter().outputString(this); } /** * @return Content of element serialized as string */ - public String toStringContentOnly() { + public final String toStringContentOnly() { return new XMLOutputter().outputElementContentString(this); } diff --git a/src/main/java/io/wcm/handler/commons/dom/AbstractHtmlElementFactory.java b/src/main/java/io/wcm/handler/commons/dom/AbstractHtmlElementFactory.java index 71f461b..deab277 100644 --- a/src/main/java/io/wcm/handler/commons/dom/AbstractHtmlElementFactory.java +++ b/src/main/java/io/wcm/handler/commons/dom/AbstractHtmlElementFactory.java @@ -25,10 +25,9 @@ /** * Contains factory methods for creating and adding Html elements and specialized types. * This class cannot be instanciated directly, but provides factory methods for HtmlElement-based classes. - * @param Class derived from HtmlElement */ @ConsumerType -public abstract class AbstractHtmlElementFactory extends AbstractElement { +public abstract class AbstractHtmlElementFactory extends AbstractElement { private static final long serialVersionUID = 1L; /** @@ -44,7 +43,7 @@ protected AbstractHtmlElementFactory(String name) { * @param elementName Element name * @return Html element. */ - public HtmlElement create(String elementName) { + public final HtmlElement create(String elementName) { return this.add(new HtmlElement(elementName)); } @@ -53,7 +52,7 @@ public HtmlElement create(String elementName) { * @param text Comment * @return Html comment. */ - public HtmlComment createComment(String text) { + public final HtmlComment createComment(String text) { HtmlComment comment = new HtmlComment(text); this.addContent(comment); return comment; @@ -63,7 +62,7 @@ public HtmlComment createComment(String text) { * Creates and adds div element. * @return Html element. */ - public Div createDiv() { + public final Div createDiv() { return this.add(new Div()); } @@ -71,7 +70,7 @@ public Div createDiv() { * Creates and adds span element. * @return Html element. */ - public Span createSpan() { + public final Span createSpan() { return this.add(new Span()); } @@ -80,7 +79,7 @@ public Span createSpan() { * @param text Text * @return Html element. */ - public Span createSpan(String text) { + public final Span createSpan(String text) { return this.add(new Span(text)); } @@ -88,7 +87,7 @@ public Span createSpan(String text) { * Creates and adds anchor (a) element. * @return Html element. */ - public Anchor createAnchor() { + public final Anchor createAnchor() { return this.add(new Anchor()); } @@ -97,7 +96,7 @@ public Anchor createAnchor() { * @param href Html "href" attribute. * @return Html element. */ - public Anchor createAnchor(String href) { + public final Anchor createAnchor(String href) { return this.add(new Anchor(href)); } @@ -107,7 +106,7 @@ public Anchor createAnchor(String href) { * @param target Html "target" attribute. * @return Html element. */ - public Anchor createAnchor(String href, String target) { + public final Anchor createAnchor(String href, String target) { return this.add(new Anchor(href, target)); } @@ -115,7 +114,7 @@ public Anchor createAnchor(String href, String target) { * Creates and adds imgage (img) element. * @return Html element. */ - public Image createImage() { + public final Image createImage() { return this.add(new Image()); } @@ -124,7 +123,7 @@ public Image createImage() { * @param src Html "src" attribute. * @return Html element. */ - public Image createImage(String src) { + public final Image createImage(String src) { return this.add(new Image(src)); } @@ -134,7 +133,7 @@ public Image createImage(String src) { * @param alt Html "alt" attribute. * @return Html element. */ - public Image createImage(String src, String alt) { + public final Image createImage(String src, String alt) { return this.add(new Image(src, alt)); } @@ -145,7 +144,7 @@ public Image createImage(String src, String alt) { * @param height Html "height" attribute. * @return Html element. */ - public Image createImage(String src, int width, int height) { + public final Image createImage(String src, int width, int height) { return this.add(new Image(src, width, height)); } @@ -157,7 +156,7 @@ public Image createImage(String src, int width, int height) { * @param height Html "height" attribute. * @return Html element. */ - public Image createImage(String src, String alt, int width, int height) { + public final Image createImage(String src, String alt, int width, int height) { return this.add(new Image(src, alt, width, height)); } @@ -165,7 +164,7 @@ public Image createImage(String src, String alt, int width, int height) { * Creates and adds script element. * @return Html element. */ - public Script createScript() { + public final Script createScript() { return this.add(new Script()); } @@ -174,7 +173,7 @@ public Script createScript() { * @param script Script block * @return Html element. */ - public Script createScript(String script) { + public final Script createScript(String script) { return this.add(new Script(script)); } @@ -182,7 +181,7 @@ public Script createScript(String script) { * Creates and adds noscript element. * @return Html element. */ - public NoScript createNoScript() { + public final NoScript createNoScript() { return this.add(new NoScript()); } @@ -190,7 +189,7 @@ public NoScript createNoScript() { * Creates and adds figure element. * @return Html element. */ - public Figure createFigure() { + public final Figure createFigure() { return this.add(new Figure()); } @@ -198,7 +197,7 @@ public Figure createFigure() { * Creates and adds figure caption element. * @return Html element. */ - public FigCaption createFigCaption() { + public final FigCaption createFigCaption() { return this.add(new FigCaption()); } @@ -206,7 +205,7 @@ public FigCaption createFigCaption() { * Creates and adds video element. * @return Html element. */ - public Video createVideo() { + public final Video createVideo() { return this.add(new Video()); } @@ -214,7 +213,7 @@ public Video createVideo() { * Creates and adds audio element. * @return Html element. */ - public Audio createAudio() { + public final Audio createAudio() { return this.add(new Audio()); } @@ -222,7 +221,7 @@ public Audio createAudio() { * Creates and adds source element. * @return Html element. */ - public Source createSource() { + public final Source createSource() { return this.add(new Source()); } diff --git a/src/main/java/io/wcm/handler/commons/dom/AbstractNonSelfClosingHtmlElement.java b/src/main/java/io/wcm/handler/commons/dom/AbstractNonSelfClosingHtmlElement.java index c052ea4..3e999a0 100644 --- a/src/main/java/io/wcm/handler/commons/dom/AbstractNonSelfClosingHtmlElement.java +++ b/src/main/java/io/wcm/handler/commons/dom/AbstractNonSelfClosingHtmlElement.java @@ -24,11 +24,10 @@ /** * Html element wrapper tags that must not rendered self-closing to avoid problems in certain browsers. * Mosf of the elements that extend from this class are block-level elements, but not all of them. - * @param Class derived from HtmlElement */ @ConsumerType @SuppressWarnings("java:S110") // # parent inheritance -public abstract class AbstractNonSelfClosingHtmlElement extends HtmlElement { +public abstract class AbstractNonSelfClosingHtmlElement extends HtmlElement { private static final long serialVersionUID = 1L; /** diff --git a/src/main/java/io/wcm/handler/commons/dom/Anchor.java b/src/main/java/io/wcm/handler/commons/dom/Anchor.java index 45dd679..980b042 100644 --- a/src/main/java/io/wcm/handler/commons/dom/Anchor.java +++ b/src/main/java/io/wcm/handler/commons/dom/Anchor.java @@ -26,7 +26,7 @@ */ @ProviderType @SuppressWarnings("java:S110") // # parent inheritance -public final class Anchor extends AbstractNonSelfClosingHtmlElement { +public final class Anchor extends AbstractNonSelfClosingHtmlElement { private static final long serialVersionUID = 1L; private static final String ELEMENT_NAME = "a"; @@ -154,4 +154,56 @@ public Anchor setAccessKey(String value) { return this; } + // -- overwrite methods for builder pattern with covariant return types -- + + @Override + protected Anchor setEmptyAttributeValueAsBoolean(String attributeName, boolean value) { + return (Anchor)super.setEmptyAttributeValueAsBoolean(attributeName, value); + } + + @Override + public Anchor setId(String value) { + return (Anchor)super.setId(value); + } + + @Override + public Anchor setCssClass(String value) { + return (Anchor)super.setCssClass(value); + } + + @Override + public Anchor addCssClass(String value) { + return (Anchor)super.addCssClass(value); + } + + @Override + public Anchor setStyleString(String value) { + return (Anchor)super.setStyleString(value); + } + + @Override + public Anchor setStyle(String styleAttribute, String styleValue) { + return (Anchor)super.setStyle(styleAttribute, styleValue); + } + + @Override + public Anchor setTitle(String value) { + return (Anchor)super.setTitle(value); + } + + @Override + public Anchor setData(String attributeName, String value) { + return (Anchor)super.setData(attributeName, value); + } + + @Override + public Anchor setAttributeValueAsLong(String name, long value) { + return (Anchor)super.setAttributeValueAsLong(name, value); + } + + @Override + public Anchor setText(String text) { + return (Anchor)super.setText(text); + } + } diff --git a/src/main/java/io/wcm/handler/commons/dom/Area.java b/src/main/java/io/wcm/handler/commons/dom/Area.java index 79cd5b1..61ef644 100644 --- a/src/main/java/io/wcm/handler/commons/dom/Area.java +++ b/src/main/java/io/wcm/handler/commons/dom/Area.java @@ -26,7 +26,7 @@ */ @ProviderType @SuppressWarnings("java:S110") // # parent inheritance -public final class Area extends HtmlElement { +public final class Area extends HtmlElement { private static final long serialVersionUID = 1L; private static final String ELEMENT_NAME = "area"; @@ -191,4 +191,56 @@ public Area setCoords(String value) { return this; } + // -- overwrite methods for builder pattern with covariant return types -- + + @Override + protected Area setEmptyAttributeValueAsBoolean(String attributeName, boolean value) { + return (Area)super.setEmptyAttributeValueAsBoolean(attributeName, value); + } + + @Override + public Area setId(String value) { + return (Area)super.setId(value); + } + + @Override + public Area setCssClass(String value) { + return (Area)super.setCssClass(value); + } + + @Override + public Area addCssClass(String value) { + return (Area)super.addCssClass(value); + } + + @Override + public Area setStyleString(String value) { + return (Area)super.setStyleString(value); + } + + @Override + public Area setStyle(String styleAttribute, String styleValue) { + return (Area)super.setStyle(styleAttribute, styleValue); + } + + @Override + public Area setTitle(String value) { + return (Area)super.setTitle(value); + } + + @Override + public Area setData(String attributeName, String value) { + return (Area)super.setData(attributeName, value); + } + + @Override + public Area setAttributeValueAsLong(String name, long value) { + return (Area)super.setAttributeValueAsLong(name, value); + } + + @Override + public Area setText(String text) { + return (Area)super.setText(text); + } + } diff --git a/src/main/java/io/wcm/handler/commons/dom/Audio.java b/src/main/java/io/wcm/handler/commons/dom/Audio.java index 8a51fa1..dbd6dea 100644 --- a/src/main/java/io/wcm/handler/commons/dom/Audio.java +++ b/src/main/java/io/wcm/handler/commons/dom/Audio.java @@ -26,7 +26,7 @@ */ @ProviderType @SuppressWarnings("java:S110") // # parent inheritance -public final class Audio extends AbstractNonSelfClosingHtmlElement