/** * Copyright 2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.bricket.web.common.debug; import org.apache.wicket.Component; import org.apache.wicket.Component.IVisitor; import org.apache.wicket.IClusterable; import org.apache.wicket.Page; import org.apache.wicket.util.string.Strings; import java.util.ArrayList; import java.util.List; /** * @author Ingo Renner * @author Henning Teek */ public final class DebugUtil { private DebugUtil() { super(); } private static class ComponentData implements IClusterable { private final String path; private final String type; private String value; private final long size; ComponentData(String path, String type, long size) { this.path = path; this.type = type; this.size = size; } @Override public String toString() { return String.format("ComponentData [path=%s, type=%s, value=%s, size=%s]", path, type, value, size); } } /** * Get recursively all components of the page, extract the information * relevant for us and add them to a list. * * @param page * @return List of component data objects */ public static List<ComponentData> getComponentData(final Page page) { final List<ComponentData> data = new ArrayList<ComponentData>(); page.visitChildren(new IVisitor<Component>() { public Object component(final Component component) { final ComponentData componentData; // anonymous class? Get the parent's class name String name = component.getClass().getName(); if (name.indexOf('$') > 0) { name = component.getClass().getSuperclass().getName(); } // remove the path component name = Strings.lastPathComponent(name, Component.PATH_SEPARATOR); componentData = new ComponentData(component.getPageRelativePath(), name, component.getSizeInBytes()); try { componentData.value = component.getDefaultModelObjectAsString(); } catch (Exception e) { componentData.value = e.getMessage(); } data.add(componentData); return IVisitor.CONTINUE_TRAVERSAL; } }); return data; } }