Skip to content

Commit

Permalink
More generic Elements and ElementsBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
luiz committed Mar 4, 2011
1 parent e8d0306 commit 2af6204
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 9 deletions.
Binary file modified example/WebContent/WEB-INF/lib/vraptor-html-dsl-1.0.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ public void append(NestedElement child) {
* @param <T>
* Type of the objects to be transformed into HTML elements
* @param objects
* List of objects to be transformed into HTML elements
* Iterable of objects to be transformed into HTML elements
* @return A fresh new instance of a {@link ElementsBuilder} for the given
* object list
*/
public static <T> ElementsBuilder<T> format(List<T> objects) {
public static <T> ElementsBuilder<T> format(Iterable<T> objects) {
return new ElementsBuilder<T>(objects);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import static com.google.common.base.Preconditions.checkArgument;

import java.lang.reflect.Method;
import java.util.List;
import java.util.Iterator;

import net.vidageek.mirror.dsl.Mirror;
import br.com.caelum.vraptor.html.tags.interfaces.NestedElement;
Expand Down Expand Up @@ -60,17 +60,21 @@ private void verifyPassedMethod(Method formatter) {
checkArgument(formatter.getParameterTypes().length == 1,
"The formatting method %s must receive only one argument",
formatter.toGenericString());
checkArgument(
formatter.getParameterTypes()[0].equals(objects.get(0).getClass()),
"The formatting method %s must receive one argument of type %s",
formatter.toGenericString(), objects.get(0).getClass().getName());
Iterator<T> iterator = objects.iterator();
if (iterator.hasNext()) {
Class<? extends Object> desiredParameterClass = iterator.next().getClass();
checkArgument(
formatter.getParameterTypes()[0].equals(desiredParameterClass),
"The formatting method %s must receive one argument of type %s",
formatter.toGenericString(), desiredParameterClass.getName());
}
}
}

private final List<T> objects;
private final Iterable<T> objects;
private final Elements elements;

public ElementsBuilder(List<T> objects) {
public ElementsBuilder(Iterable<T> objects) {
this.objects = objects;
this.elements = new Elements();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.junit.Test;
Expand Down Expand Up @@ -52,6 +53,13 @@ public void throwsExceptionWhenTryingToUseAMethodThatReturnsASubclassOfNestedEle
ElementsBuilder<Integer> builder = new ElementsBuilder<Integer>(objects);
builder.using(new Formatter()).formatIntAndReturnTag(null);
}

@Test
public void doesNotCrashWhenFormattingAnEmptyList() throws Exception {
List<Integer> objects = Collections.emptyList();
ElementsBuilder<Integer> builder = new ElementsBuilder<Integer>(objects);
builder.using(new Formatter()).formatInt(null);
}
}

class Formatter {
Expand Down

0 comments on commit 2af6204

Please sign in to comment.