com.googlecode.gwt.test.internal.handlers.HTMLTableImplCreateHandler Maven / Gradle / Ivy
package com.googlecode.gwt.test.internal.handlers;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NodeList;
import com.googlecode.gwt.test.GwtCreateHandler;
import com.googlecode.gwt.test.exceptions.GwtTestPatchException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
class HTMLTableImplCreateHandler implements GwtCreateHandler {
private static final class HTMLTableImplInvocationHandler implements InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("getRows")) {
return getRows((Element) args[0]);
} else if (method.getName().equals("getCells")) {
return getCells((Element) args[0]);
} else {
throw new GwtTestPatchException(
"Unhandled method '"
+ method.getDeclaringClass().getName()
+ "."
+ method.getName()
+ "' by the default gwt-test-utils GwtCreateHandler for HTMLTable.HTMLTableImpl subtypes");
}
}
private JsArray getCells(Element row) {
return toArray(row.getElementsByTagName("td"));
}
private JsArray getRows(Element tbody) {
return toArray(tbody.getElementsByTagName("tr"));
}
private JsArray toArray(NodeList elements) {
JsArray array = JavaScriptObject.createArray().>cast();
for (int i = 0; i < elements.getLength(); i++) {
array.set(i, elements.getItem(i));
}
return array;
}
}
public Object create(Class classLiteral) throws Exception {
if (!classLiteral.getName().equals("com.google.gwt.user.client.ui.HTMLTable$HTMLTableImpl")) {
return null;
}
return Proxy.newProxyInstance(classLiteral.getClassLoader(), new Class[]{classLiteral},
new HTMLTableImplInvocationHandler());
}
}