Skip to content

Commit 40b4c9f

Browse files
committed
Allow binded fields to match more than one selector
1 parent cb41be2 commit 40b4c9f

24 files changed

+1176
-118
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<groupId>io.skullabs.stalkr</groupId>
1212
<artifactId>stalkr-parent</artifactId>
13-
<version>0.1.0</version>
13+
<version>0.2.1</version>
1414
<name>Stalkr: The crawler took kit for Java</name>
1515
<packaging>pom</packaging>
1616

stalkr-binder/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>io.skullabs.stalkr</groupId>
77
<artifactId>stalkr-parent</artifactId>
8-
<version>0.1.0</version>
8+
<version>0.2.1</version>
99
</parent>
1010

1111
<artifactId>stalkr-binder</artifactId>
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package stalkr.html;
22

33
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Repeatable;
45
import java.lang.annotation.Retention;
56
import java.lang.annotation.RetentionPolicy;
67
import java.lang.annotation.Target;
78

9+
@Repeatable( BindableAttributes.class )
810
@Retention( RetentionPolicy.RUNTIME )
911
@Target( ElementType.FIELD )
1012
public @interface BindableAttribute {
1113

1214
String selector();
13-
1415
String attribute();
1516
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package stalkr.html;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Retention( RetentionPolicy.RUNTIME )
9+
@Target( ElementType.FIELD )
10+
public @interface BindableAttributes {
11+
12+
BindableAttribute[] value();
13+
}

stalkr-binder/src/main/java/stalkr/html/BindableClassFactory.java

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

stalkr-binder/src/main/java/stalkr/html/BindableText.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package stalkr.html;
22

33
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Repeatable;
45
import java.lang.annotation.Retention;
56
import java.lang.annotation.RetentionPolicy;
67
import java.lang.annotation.Target;
78

9+
@Repeatable( BindableTexts.class )
810
@Retention( RetentionPolicy.RUNTIME )
911
@Target( ElementType.FIELD )
1012
public @interface BindableText {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package stalkr.html;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Retention( RetentionPolicy.RUNTIME )
9+
@Target( ElementType.FIELD )
10+
public @interface BindableTexts {
11+
12+
BindableText[] value();
13+
}

stalkr-binder/src/main/java/stalkr/html/HtmlBinder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import org.jsoup.nodes.Element;
1010
import org.jsoup.select.Elements;
1111

12+
import stalkr.html.parser.BindableClass;
13+
import stalkr.html.parser.BindableClassFactory;
1214
import trip.spi.Provided;
1315
import trip.spi.Singleton;
1416

stalkr-binder/src/main/java/stalkr/html/AttributeElementSetter.java renamed to stalkr-binder/src/main/java/stalkr/html/parser/AttributeElementSetter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package stalkr.html;
1+
package stalkr.html.parser;
22

33
import java.lang.reflect.Field;
44

55
import lombok.RequiredArgsConstructor;
6+
import lombok.val;
67

78
import org.jsoup.nodes.Element;
89

@@ -16,8 +17,9 @@ public class AttributeElementSetter implements Setter {
1617
@Override
1718
public void bind( final Element document, final Object instance ) {
1819
try {
19-
final Element element = document.select( selector ).first();
20-
field.set( instance, element.attr( attribute ) );
20+
val element = document.select( selector ).first();
21+
if ( element != null )
22+
field.set( instance, element.attr( attribute ) );
2123
} catch ( IllegalArgumentException | IllegalAccessException e ) {
2224
throw new RuntimeException( e );
2325
}

stalkr-binder/src/main/java/stalkr/html/BindableClass.java renamed to stalkr-binder/src/main/java/stalkr/html/parser/BindableClass.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package stalkr.html;
1+
package stalkr.html.parser;
22

33
import java.lang.reflect.Constructor;
44
import java.lang.reflect.InvocationTargetException;
@@ -14,7 +14,7 @@
1414
* @author Miere Teixeira
1515
*/
1616
@RequiredArgsConstructor
17-
class BindableClass {
17+
public class BindableClass {
1818

1919
final Class<?> type;
2020
final List<Setter> values;

0 commit comments

Comments
 (0)