Skip to content

Commit

Permalink
Remove generic from HtmlElement (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanseifert authored Jan 19, 2024
1 parent b0a2ca9 commit 3ba9ceb
Show file tree
Hide file tree
Showing 35 changed files with 940 additions and 76 deletions.
3 changes: 3 additions & 0 deletions changes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
<action type="remove" dev="sseifert" issue="1">
Remove deprecated functionality.
</action>
<action type="update" dev="sseifert" issue="3">
DOM: Remove generic from HtmlElement class.
</action>
<action type="update" dev="sseifert">
Switch to AEM 6.5.17 as minimum version.
</action>
Expand Down
19 changes: 9 additions & 10 deletions src/main/java/io/wcm/handler/commons/dom/AbstractElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,10 @@
/**
* Generic DOM element.
* This element implementation is derived from JDOM element implementation.
* @param <T> Class extending Element
*/
@SuppressWarnings("unchecked")
@ConsumerType
public abstract class AbstractElement<T extends 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
Expand Down Expand Up @@ -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;
}

/**
Expand Down Expand Up @@ -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;
}

/**
Expand Down Expand Up @@ -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 <ElementType> Type that extends Element
* @param <T> Type that extends Element
* @param element Element to add. Null values are ignored.
* @return The added element.
*/
public final <ElementType extends AbstractElement> ElementType add(ElementType element) {
public final <T extends AbstractElement> T add(T element) {
this.addContent(element);
return element;
}
Expand Down Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 <T> Class derived from HtmlElement
*/
@ConsumerType
public abstract class AbstractHtmlElementFactory<T extends HtmlElement> extends AbstractElement<T> {
public abstract class AbstractHtmlElementFactory extends AbstractElement {
private static final long serialVersionUID = 1L;

/**
Expand All @@ -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));
}

Expand All @@ -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;
Expand All @@ -63,15 +62,15 @@ 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());
}

/**
* Creates and adds span element.
* @return Html element.
*/
public Span createSpan() {
public final Span createSpan() {
return this.add(new Span());
}

Expand All @@ -80,15 +79,15 @@ 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));
}

/**
* Creates and adds anchor (a) element.
* @return Html element.
*/
public Anchor createAnchor() {
public final Anchor createAnchor() {
return this.add(new Anchor());
}

Expand All @@ -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));
}

Expand All @@ -107,15 +106,15 @@ 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));
}

/**
* Creates and adds imgage (img) element.
* @return Html element.
*/
public Image createImage() {
public final Image createImage() {
return this.add(new Image());
}

Expand All @@ -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));
}

Expand All @@ -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));
}

Expand All @@ -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));
}

Expand All @@ -157,15 +156,15 @@ 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));
}

/**
* Creates and adds script element.
* @return Html element.
*/
public Script createScript() {
public final Script createScript() {
return this.add(new Script());
}

Expand All @@ -174,55 +173,55 @@ 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));
}

/**
* Creates and adds noscript element.
* @return Html element.
*/
public NoScript createNoScript() {
public final NoScript createNoScript() {
return this.add(new NoScript());
}

/**
* Creates and adds figure element.
* @return Html element.
*/
public Figure createFigure() {
public final Figure createFigure() {
return this.add(new Figure());
}

/**
* Creates and adds figure caption element.
* @return Html element.
*/
public FigCaption createFigCaption() {
public final FigCaption createFigCaption() {
return this.add(new FigCaption());
}

/**
* Creates and adds video element.
* @return Html element.
*/
public Video createVideo() {
public final Video createVideo() {
return this.add(new Video());
}

/**
* Creates and adds audio element.
* @return Html element.
*/
public Audio createAudio() {
public final Audio createAudio() {
return this.add(new Audio());
}

/**
* Creates and adds source element.
* @return Html element.
*/
public Source createSource() {
public final Source createSource() {
return this.add(new Source());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 <T> Class derived from HtmlElement
*/
@ConsumerType
@SuppressWarnings("java:S110") // # parent inheritance
public abstract class AbstractNonSelfClosingHtmlElement<T extends HtmlElement> extends HtmlElement<T> {
public abstract class AbstractNonSelfClosingHtmlElement extends HtmlElement {
private static final long serialVersionUID = 1L;

/**
Expand Down
54 changes: 53 additions & 1 deletion src/main/java/io/wcm/handler/commons/dom/Anchor.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/
@ProviderType
@SuppressWarnings("java:S110") // # parent inheritance
public final class Anchor extends AbstractNonSelfClosingHtmlElement<Anchor> {
public final class Anchor extends AbstractNonSelfClosingHtmlElement {
private static final long serialVersionUID = 1L;

private static final String ELEMENT_NAME = "a";
Expand Down Expand Up @@ -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);
}

}
Loading

0 comments on commit 3ba9ceb

Please sign in to comment.