| /******************************************************************************* |
| * Copyright (c) 2001, 2008 Oracle Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Oracle Corporation - initial API and implementation |
| *******************************************************************************/ |
| package instrument; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.ObjectInputStream; |
| import java.util.Iterator; |
| |
| import javax.faces.component.UIComponent; |
| import javax.faces.component.UIInput; |
| import javax.faces.component.UIOutput; |
| |
| import org.eclipse.jst.jsf.common.runtime.internal.debug.JSFMonitorMessage; |
| import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentFactory; |
| import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo; |
| import org.eclipse.jst.jsf.common.runtime.internal.model.component.FacetInfo; |
| import org.eclipse.jst.jsf.common.runtime.internal.model.component.UIInputInfo; |
| import org.eclipse.jst.jsf.common.runtime.internal.model.component.UIOutputInfo; |
| |
| public class MyMonitorMessageFactory |
| { |
| public static JSFMonitorMessage createJSFMonitorMessage(InputStream inStream) throws IOException, ClassCastException, ClassNotFoundException |
| { |
| ObjectInputStream objectStream = new ObjectInputStream(inStream); |
| Object nextObject = objectStream.readObject(); |
| return (JSFMonitorMessage) nextObject; |
| } |
| |
| static ComponentInfo buildComponentTree(UIComponent component, boolean isFacet) |
| { |
| final ComponentInfo componentInfo = getComponentData(component, isFacet); |
| |
| for (Iterator it = component.getChildren().iterator(); it.hasNext();) |
| { |
| UIComponent child = (UIComponent) it.next(); |
| componentInfo.getChildren().add(buildComponentTree(child, false)); |
| } |
| |
| for (Iterator it = component.getFacets().values().iterator(); it.hasNext();) |
| { |
| UIComponent facet = (UIComponent) it.next(); |
| componentInfo.getChildren().add(buildComponentTree(facet, true)); |
| } |
| |
| return componentInfo; |
| } |
| |
| private static ComponentInfo getComponentData(final UIComponent component, boolean isFacet) |
| { |
| if (isFacet) |
| { |
| return calculateFacetInfo(component); |
| } |
| else if (component instanceof UIInput) |
| { |
| return calculateUIInput((UIInput)component); |
| } |
| else if (component instanceof UIOutput) |
| { |
| return calculateUIOutput((UIOutput)component); |
| } |
| |
| // default; just make a component |
| return calculateComponentInfo(component); |
| } |
| |
| private static ComponentInfo calculateComponentInfo(UIComponent component) |
| { |
| final String id = component.getId(); |
| final String parentId = component.getParent() == null ? null : component.getParent().getId(); |
| final String componentFamily = component.getFamily(); |
| final String renderFamily = component.getRendererType(); |
| final String componentType = null; |
| final String componentClass = component.getClass().getCanonicalName(); |
| |
| return ComponentFactory.createComponentInfo |
| (id, parentId, componentFamily, renderFamily, componentType, componentClass); |
| } |
| |
| private static FacetInfo calculateFacetInfo(UIComponent component) |
| { |
| final String id = component.getId(); |
| final String parentId = component.getParent() == null ? null : component.getParent().getId(); |
| final String componentFamily = component.getFamily(); |
| final String renderFamily = component.getRendererType(); |
| final String componentType = null; |
| final String componentClass = component.getClass().getCanonicalName(); |
| |
| return ComponentFactory.createFacetInfo |
| (id, parentId, componentFamily, renderFamily, componentType, componentClass); |
| } |
| |
| private static UIInputInfo calculateUIInput(UIInput uiInput) |
| { |
| final String id = uiInput.getId(); |
| final String parentId = uiInput.getParent() == null ? null : uiInput.getParent().getId(); |
| final String componentFamily = uiInput.getFamily(); |
| final String renderFamily = uiInput.getRendererType(); |
| final String componentType = null; |
| final String componentClass = uiInput.getClass().getCanonicalName(); |
| final String isValid = Boolean.toString(uiInput.isValid()); |
| final String isImmediate = Boolean.toString(uiInput.isImmediate()); |
| final String isRequired = Boolean.toString(uiInput.isRequired()); |
| final String isRendered = Boolean.toString(uiInput.isRendered()); |
| |
| return ComponentFactory.createUIInputInfo |
| (id, parentId, componentFamily, renderFamily, isValid, isImmediate, isRequired, isRendered, componentType, componentClass); |
| } |
| |
| private static UIOutputInfo calculateUIOutput(UIOutput uiOutput) |
| { |
| final String id = uiOutput.getId(); |
| final String parentId = uiOutput.getParent() == null ? null : uiOutput.getParent().getId(); |
| final String componentFamily = uiOutput.getFamily(); |
| final String renderFamily = uiOutput.getRendererType(); |
| final String componentType = null; |
| final String componentClass = uiOutput.getClass().getCanonicalName(); |
| final String isRendered = Boolean.toString(uiOutput.isRendered()); |
| |
| return ComponentFactory.createUIOutputInfo |
| (id, parentId, componentFamily, renderFamily, isRendered, componentType, componentClass); |
| } |
| } |