Skip to content

Commit 1759feb

Browse files
author
nicolaiparlog
committed
Restructured 'org.codefx.libfx.dom':
* the package converts events instead of transforming them (pure naming) * prefixed some classes with 'Dom' to clarifiy what they are converting * replaced the former interface 'EventTransformer' with its only implementation
1 parent 9814080 commit 1759feb

16 files changed

+231
-251
lines changed

src/main/java/org/codefx/libfx/control/webview/DefaultWebViewHyperlinkListenerHandle.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515

1616
import org.codefx.libfx.concurrent.when.ExecuteAlwaysWhen;
1717
import org.codefx.libfx.concurrent.when.ExecuteWhen;
18+
import org.codefx.libfx.dom.DomEventConverter;
1819
import org.codefx.libfx.dom.DomEventType;
19-
import org.codefx.libfx.dom.EventTransformer;
2020
import org.w3c.dom.NodeList;
2121
import org.w3c.dom.events.Event;
2222
import org.w3c.dom.events.EventListener;
@@ -61,9 +61,9 @@ class DefaultWebViewHyperlinkListenerHandle implements WebViewHyperlinkListenerH
6161
private final EventListener domEventListener;
6262

6363
/**
64-
* Transforms DOM {@link Event}s to {@link HyperlinkEvent}s.
64+
* Converts the observed DOM {@link Event}s to {@link HyperlinkEvent}s.
6565
*/
66-
private final EventTransformer eventTransformer;
66+
private final DomEventConverter eventConverter;
6767

6868
/**
6969
* Executes {@link #attachListenerInApplicationThread()} each time the web view's load worker changes its state to
@@ -89,17 +89,17 @@ class DefaultWebViewHyperlinkListenerHandle implements WebViewHyperlinkListenerH
8989
* the {@link WebViewHyperlinkListener} which will be attached to the {@code webView}
9090
* @param eventTypeFilter
9191
* the filter for events by their {@link EventType}
92-
* @param eventTransformer
93-
* the transformer for DOM {@link Event}s
92+
* @param eventConverter
93+
* the converter for DOM {@link Event}s
9494
*/
9595
public DefaultWebViewHyperlinkListenerHandle(
9696
WebView webView, WebViewHyperlinkListener eventListener, Optional<EventType> eventTypeFilter,
97-
EventTransformer eventTransformer) {
97+
DomEventConverter eventConverter) {
9898

9999
this.webView = webView;
100100
this.eventListener = eventListener;
101101
this.eventTypeFilter = eventTypeFilter;
102-
this.eventTransformer = eventTransformer;
102+
this.eventConverter = eventConverter;
103103

104104
domEventListener = this::callHyperlinkListenerWithEvent;
105105
}
@@ -248,18 +248,18 @@ private boolean manageListenerForEventType(DomEventType domEventType) {
248248
// #region PROCESS EVENT
249249

250250
/**
251-
* Transforms the specified {@code domEvent} into a {@link HyperlinkEvent} and calls the {@link #eventListener} with
251+
* Converts the specified {@code domEvent} into a {@link HyperlinkEvent} and calls the {@link #eventListener} with
252252
* it.
253253
*
254254
* @param domEvent
255255
* the DOM-{@link Event}
256256
*/
257257
private void callHyperlinkListenerWithEvent(Event domEvent) {
258-
boolean canNotTransformEvent = !eventTransformer.canTransformToHyperlinkEvent(domEvent);
259-
if (canNotTransformEvent)
258+
boolean canNotConvertEvent = !eventConverter.canConvertToHyperlinkEvent(domEvent);
259+
if (canNotConvertEvent)
260260
return;
261261

262-
HyperlinkEvent event = eventTransformer.transformToHyperlinkEvent(domEvent, webView);
262+
HyperlinkEvent event = eventConverter.convertToHyperlinkEvent(domEvent, webView);
263263
boolean cancel = eventListener.hyperlinkUpdate(event);
264264
cancel(domEvent, cancel);
265265
}

src/main/java/org/codefx/libfx/control/webview/WebViews.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import javax.swing.event.HyperlinkEvent;
99
import javax.swing.event.HyperlinkEvent.EventType;
1010

11-
import org.codefx.libfx.dom.DefaultEventTransformer;
11+
import org.codefx.libfx.dom.DomEventConverter;
1212
import org.codefx.libfx.dom.DomEventType;
13-
import org.codefx.libfx.dom.StaticEventTransformer;
13+
import org.codefx.libfx.dom.StaticDomEventConverter;
1414
import org.w3c.dom.events.Event;
1515

1616
/**
@@ -57,7 +57,7 @@ public static WebViewHyperlinkListenerHandle createHyperlinkListenerHandle(
5757
* <p>
5858
* Once attached, the listener will be called on any event on an hyperlink (i.e. any element with tag name "a")
5959
* which can be represented as a {@link HyperlinkEvent} with the specified event type. See
60-
* {@link DomEventType#toHyperlinkEventType()} for the transformation of event types.
60+
* {@link DomEventType#toHyperlinkEventType()} for the conversion of event types.
6161
*
6262
* @param webView
6363
* the {@link WebView} to which the listener will be added
@@ -148,40 +148,40 @@ private static WebViewHyperlinkListenerHandle addHyperlinkListenerDetached(
148148
Objects.requireNonNull(eventTypeFilter, "The argument 'eventTypeFilter' must not be null.");
149149

150150
return new DefaultWebViewHyperlinkListenerHandle(
151-
webView, listener, eventTypeFilter, new DefaultEventTransformer());
151+
webView, listener, eventTypeFilter, new DomEventConverter());
152152
}
153153

154154
// #end HYPERLINK LISTENERS
155155

156156
// #region EVENTS
157157

158158
/**
159-
* Indicates whether the specified DOM event can be transformed to a {@link HyperlinkEvent}.
159+
* Indicates whether the specified DOM event can be converted to a {@link HyperlinkEvent}.
160160
*
161161
* @param domEvent
162162
* the DOM-{@link Event}
163163
* @return true if the event's {@link Event#getType() type} has an equivalent {@link EventType EventType}
164164
*/
165-
public static boolean canTransformToHyperlinkEvent(Event domEvent) {
166-
return StaticEventTransformer.canTransformToHyperlinkEvent(domEvent);
165+
public static boolean canConvertToHyperlinkEvent(Event domEvent) {
166+
return StaticDomEventConverter.canConvertToHyperlinkEvent(domEvent);
167167
}
168168

169169
/**
170-
* Transforms the specified DOM event to a hyperlink event.
170+
* Converts the specified DOM event to a hyperlink event.
171171
*
172172
* @param domEvent
173173
* the DOM-{@link Event} from which the {@link HyperlinkEvent} will be created
174174
* @param source
175175
* the source of the {@code domEvent}
176176
* @return a {@link HyperlinkEvent}
177177
* @throws IllegalArgumentException
178-
* if the specified event can not be transformed to a hyperlink event; this is the case if
179-
* {@link #canTransformToHyperlinkEvent(Event)} returns false
178+
* if the specified event can not be converted to a hyperlink event; this is the case if
179+
* {@link #canConvertToHyperlinkEvent(Event)} returns false
180180
*/
181-
public static HyperlinkEvent transformToHyperlinkEvent(Event domEvent, Object source)
181+
public static HyperlinkEvent convertToHyperlinkEvent(Event domEvent, Object source)
182182
throws IllegalArgumentException {
183183

184-
return StaticEventTransformer.transformToHyperlinkEvent(domEvent, source);
184+
return StaticDomEventConverter.convertToHyperlinkEvent(domEvent, source);
185185
}
186186

187187
/**

src/main/java/org/codefx/libfx/dom/DefaultEventTransformer.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/main/java/org/codefx/libfx/dom/EventTransformer.java renamed to src/main/java/org/codefx/libfx/dom/DomEventConverter.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,38 @@
11
package org.codefx.libfx.dom;
22

3+
import java.util.Objects;
4+
35
import javax.swing.event.HyperlinkEvent;
46
import javax.swing.event.HyperlinkEvent.EventType;
57

68
import org.w3c.dom.events.Event;
79

810
/**
9-
* Transforms {@link Event DOM Events} to Swing's {@link HyperlinkEvent HyperlinkEvents}.
11+
* Converts {@link Event DOM Events} to Swing's {@link HyperlinkEvent HyperlinkEvents}.
12+
* <p>
13+
* This class is thread-safe, i.e. the provided methods can be called from different threads and concurrent executions
14+
* do not interfere with each other.
1015
*/
11-
public interface EventTransformer {
16+
public final class DomEventConverter {
1217

1318
/**
14-
* Indicates whether the specified DOM event can be transformed to a {@link HyperlinkEvent}.
19+
* Indicates whether the specified DOM event can be converted to a {@link HyperlinkEvent}.
1520
*
1621
* @param domEvent
1722
* the DOM-{@link Event}
1823
* @return true if the event's {@link Event#getType() type} has an equivalent {@link EventType EventType}
1924
*/
20-
boolean canTransformToHyperlinkEvent(Event domEvent);
25+
@SuppressWarnings("static-method")
26+
public boolean canConvertToHyperlinkEvent(Event domEvent) {
27+
Objects.requireNonNull(domEvent, "The argument 'domEvent' must not be null.");
28+
29+
Object source = "the source does not matter for this call";
30+
SingleDomEventConverter converter = new SingleDomEventConverter(domEvent, source);
31+
return converter.canConvert();
32+
}
2133

2234
/**
23-
* Transforms the specified DOM event to a hyperlink event.
35+
* Converts the specified DOM event to a hyperlink event.
2436
*
2537
* @param domEvent
2638
* the DOM-{@link Event} from which the {@link HyperlinkEvent} will be created
@@ -39,9 +51,13 @@ public interface EventTransformer {
3951
* <li> {@link HyperlinkEvent#getSourceElement() getSourceElement()} returns null
4052
* </ul>
4153
* @throws IllegalArgumentException
42-
* if the specified event can not be transformed to a hyperlink event; this is the case if
43-
* {@link #canTransformToHyperlinkEvent(Event)} returns false
54+
* if the specified event can not be converted to a hyperlink event; this is the case if
55+
* {@link #canConvertToHyperlinkEvent(Event)} returns false
4456
*/
45-
HyperlinkEvent transformToHyperlinkEvent(Event domEvent, Object source) throws IllegalArgumentException;
57+
@SuppressWarnings("static-method")
58+
public HyperlinkEvent convertToHyperlinkEvent(Event domEvent, Object source) throws IllegalArgumentException {
59+
SingleDomEventConverter converter = new SingleDomEventConverter(domEvent, source);
60+
return converter.convert();
61+
}
4662

4763
}

src/main/java/org/codefx/libfx/dom/DomEventType.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
import javax.swing.event.HyperlinkEvent.EventType;
77

88
/**
9-
* The types of DOM events names. Actually, this is only a selection of those needed to determine a hyperlink
10-
* {@link EventType EventType}s.
9+
* The names of those types of DOM events for which an equivalent hyperlink {@link EventType EventType}s exists.
1110
* <p>
1211
*
1312
* @see <a href="http://www.w3.org/TR/DOM-Level-3-Events/#event-types-list">DOM Level 3 Events Specification - Event
@@ -83,7 +82,7 @@ public String getDomName() {
8382

8483
/**
8584
* Returns the DOM event type for the specified event name.
86-
*
85+
*
8786
* @param domEventName
8887
* the name of the DOM event as per W3C specification
8988
* @return a {@link DomEventType} if it could be determined; otherwise {@link Optional#empty()}

src/main/java/org/codefx/libfx/dom/DomEventToHyperlinkEventTransformer.java renamed to src/main/java/org/codefx/libfx/dom/SingleDomEventConverter.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
/**
1616
* Creates a {@link HyperlinkEvent} from the DOM-{@link Event} specified during construction.
1717
* <p>
18-
* In that sense it acts like an {@link EventTransformer} but because the {@link #domEvent} and its {@link #source} have
19-
* to be provided during construction it can not actually implement that interface.
18+
* In does the actual work for the {@link DomEventConverter} but is a "one-shot" version in the sense that it can only
19+
* convert the event specified during construction.
2020
*/
21-
class DomEventToHyperlinkEventTransformer {
21+
class SingleDomEventConverter {
2222

2323
/**
2424
* The DOM-{@link Event} from which the {@link HyperlinkEvent} will be created.
@@ -31,29 +31,29 @@ class DomEventToHyperlinkEventTransformer {
3131
private final Object source;
3232

3333
/**
34-
* Creates a new transformer for the specified arguments.
34+
* Creates a new converter for the specified arguments.
3535
*
3636
* @param domEvent
3737
* the DOM-{@link Event} from which the {@link HyperlinkEvent} will be created
3838
* @param source
3939
* the source of the {@code domEvent}
4040
*/
41-
public DomEventToHyperlinkEventTransformer(Event domEvent, Object source) {
41+
public SingleDomEventConverter(Event domEvent, Object source) {
4242
Objects.requireNonNull(domEvent, "The argument 'domEvent' must not be null.");
4343
Objects.requireNonNull(source, "The argument 'source' must not be null.");
4444

4545
this.domEvent = domEvent;
4646
this.source = source;
4747
}
4848

49-
// #region TRANSFORM
49+
// #region CONVERT
5050

5151
/**
52-
* Indicates whether the DOM event specified during construction can be transformed to a {@link HyperlinkEvent}.
52+
* Indicates whether the DOM event specified during construction can be converted to a {@link HyperlinkEvent}.
5353
*
5454
* @return true if the event's {@link Event#getType() type} has an equivalent {@link EventType EventType}
5555
*/
56-
public boolean canTransform() {
56+
public boolean canConvert() {
5757
Optional<EventType> eventType = getEventTypeFrom(domEvent);
5858
return eventType.isPresent();
5959
}
@@ -74,14 +74,14 @@ private static Optional<EventType> getEventTypeFrom(Event domEvent) {
7474
}
7575

7676
/**
77-
* Transforms the event specified during construction to a hyperlink event.
77+
* Converts the event specified during construction to a hyperlink event.
7878
*
7979
* @return a {@link HyperlinkEvent}
8080
* @throws IllegalArgumentException
81-
* if the specified event can not be transformed to a hyperlink event; this is the case if
82-
* {@link #canTransform()} returns false
81+
* if the specified event can not be converted to a hyperlink event; this is the case if
82+
* {@link #canConvert()} returns false
8383
*/
84-
public HyperlinkEvent transform() throws IllegalArgumentException {
84+
public HyperlinkEvent convert() throws IllegalArgumentException {
8585
EventType type = getEventTypeForDomEvent();
8686
Optional<URL> url = getURL();
8787
String linkDescription = getTextContent();
@@ -103,7 +103,7 @@ private EventType getEventTypeForDomEvent() throws IllegalArgumentException {
103103
else
104104
throw new IllegalArgumentException(
105105
"The DOM event '" + domEvent + "' of type '" + domEvent.getType()
106-
+ "' can not be transformed to a hyperlink event.");
106+
+ "' can not be converted to a hyperlink event.");
107107
}
108108

109109
/**
@@ -208,6 +208,6 @@ private static Optional<URL> createURL(Optional<String> baseURI, String href) {
208208
return Optional.empty();
209209
}
210210

211-
// #end TRANSFORM
211+
// #end CONVERT
212212

213213
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.codefx.libfx.dom;
2+
3+
import java.util.Objects;
4+
5+
import javax.swing.event.HyperlinkEvent;
6+
7+
import org.w3c.dom.events.Event;
8+
9+
/**
10+
* Class which provides {@link DomEventConverter} methods statically.
11+
* <p>
12+
* This class is thread-safe, i.e. the provided methods can be called from different threads and concurrent executions
13+
* do not interfere with each other.
14+
*/
15+
public final class StaticDomEventConverter {
16+
17+
/**
18+
* @see DomEventConverter#canConvertToHyperlinkEvent(Event)
19+
*/
20+
@SuppressWarnings("javadoc")
21+
public static boolean canConvertToHyperlinkEvent(Event domEvent) {
22+
Objects.requireNonNull(domEvent, "The argument 'domEvent' must not be null.");
23+
24+
Object source = "the source does not matter for this call";
25+
SingleDomEventConverter converter = new SingleDomEventConverter(domEvent, source);
26+
return converter.canConvert();
27+
}
28+
29+
/**
30+
* @see DomEventConverter#convertToHyperlinkEvent(Event, Object)
31+
*/
32+
@SuppressWarnings("javadoc")
33+
public static HyperlinkEvent convertToHyperlinkEvent(Event domEvent, Object source)
34+
throws IllegalArgumentException {
35+
36+
SingleDomEventConverter converter = new SingleDomEventConverter(domEvent, source);
37+
return converter.convert();
38+
}
39+
40+
}

0 commit comments

Comments
 (0)