/** * Copyright 2008-2016 Qualogy Solutions B.V. * * 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 com.qualogy.qafe.mgwt.client.ui.renderer; import java.util.HashMap; import java.util.Map; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.HasEnabled; import com.google.gwt.user.client.ui.UIObject; import com.qualogy.qafe.mgwt.client.activities.AbstractActivity; import com.qualogy.qafe.mgwt.client.context.ClientApplicationContext; import com.qualogy.qafe.mgwt.client.ui.component.ComponentHelper; import com.qualogy.qafe.mgwt.client.ui.component.HasData; import com.qualogy.qafe.mgwt.client.util.ComponentRepository; import com.qualogy.qafe.mgwt.client.vo.ui.ComponentGVO; import com.qualogy.qafe.mgwt.shared.QAMLConstants; import com.qualogy.qafe.mgwt.shared.QAMLUtil; public abstract class AbstractComponentRenderer implements GWTUIRenderer { private static final Map<String,GWTUIRenderer> COMPONENT_RENDERER_MAP = new HashMap<String,GWTUIRenderer>(); static { COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.xml.component.Accordion", null); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.ButtonGVO", new ButtonRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.CheckBoxGVO", new CheckBoxRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.ChoiceGVO", new ChoiceRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.ChoiceItemGVO", new ChoiceItemRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.DataGridGVO", new DataGridRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.DropDownGVO", new DropDownRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.FileUploadGVO", new FileUploadRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.FrameGVO", new FrameRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.HiddenGVO", new HiddenRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.HTMLGVO", new HTMLRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.ImageGVO", new ImageRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.LabelGVO", new LabelRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.LinkGVO", new LinkRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.ListBoxGVO", new ListBoxRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.MapGVO", new MapRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.MenuItemGVO", new MenuItemRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.MenuItemSeparatorGVO", new MenuItemSeparatorRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.PanelGVO", new PanelRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.PanelRefGVO", new PanelRefRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.PasswordTextFieldGVO", new PasswordTextFieldRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.RootPanelGVO", new RootPanelRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.SliderGVO", new SliderRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.StackPanelGVO", new StackPanelRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.StackGVO", new StackRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.SplitPanelGVO", new SplitPanelRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.TableGVO", new TableRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.TabPanelGVO", new TabPanelRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.TabGVO", new TabRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.Toolbar", new ToolbarRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.ToolbarItem", new ToolbarItemRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.TextFieldGVO", new AnyTextFieldRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.TextAreaGVO", new TextAreaRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.TileListGVO", new TileListRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.TreeGVO", new TreeRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.TreeItemGVO", new TreeItemRenderer()); COMPONENT_RENDERER_MAP.put("com.qualogy.qafe.gwt.client.vo.ui.WindowGVO", new WindowRenderer()); } protected UIObject[] renderChildComponents(ComponentGVO[] components, String owner, String uuid, String parent, String context, AbstractActivity activity) { UIObject[] renderedComponents = null; if (components != null) { renderedComponents = new UIObject[components.length]; for (int i=0; i<components.length; i++) { renderedComponents[i] = renderChildComponent(components[i], owner, uuid, parent, context, activity); } } return renderedComponents; } protected UIObject renderChildComponent(ComponentGVO component, String owner, String uuid, String parent, String context, AbstractActivity activity) { UIObject renderedComponent = null; if (component != null) { try { // TODO use component.getClass().getName()? // ToolbarGVO and ToolbarItemGVO do not return the 'GVO' postfix when calling getClassName() String className = component.getClassName(); Object object = COMPONENT_RENDERER_MAP.get(className); if (object instanceof GWTUIRenderer) { GWTUIRenderer renderer = (GWTUIRenderer)object; renderedComponent = renderer.render(component, owner, uuid, parent, context, activity); } else { ClientApplicationContext.getInstance().log("Unable to find renderer for class " + className, null); } } catch (Exception e) { ClientApplicationContext.getInstance().log("AbstractComponentRenderer:renderChildComponent", e); } } return renderedComponent; } protected void registerComponent(ComponentGVO component, UIObject widget, String owner, String parent, String context) { ComponentRepository.getInstance().addComponent(owner, parent, context, widget, component); } protected void init(ComponentGVO component, UIObject widget, String owner, String uuid, String parent, String context, AbstractActivity activity) { initAvailablitiy(component, widget, uuid, parent, context); initVisibility(component, widget, uuid, parent, context); initSize(component, widget, uuid, parent, context); initStyling(component, widget, uuid, parent, context); initTooltip(component, widget, uuid, parent, context); initDataName(component, widget, uuid, parent, context); } protected void initDataName(ComponentGVO component, UIObject widget, String uuid, String parent, String context) { if (component == null) { return; } String dataName = component.getFieldName(); if (QAMLUtil.isEmpty(dataName)) { return; } if (widget instanceof HasData) { HasData hasData = (HasData)widget; hasData.setDataName(dataName); } } protected void initSize(ComponentGVO component, UIObject widget, String uuid, String parent, String context) { if (component == null) { return; } String width = component.getWidth(); String height = component.getHeight(); initSize(widget, width, height, uuid, parent, context); } protected void initSize(UIObject widget, String width, String height, String uuid, String parent, String context) { if (widget == null) { return; } if (!QAMLUtil.isEmpty(width)) { if (!width.startsWith("-")) { // Width is not negative if (QAMLUtil.isNumber(width)) { width = width + QAMLConstants.UNIT; } widget.setWidth(width); } } if (!QAMLUtil.isEmpty(height)) { if (!height.startsWith("-")) { // Height is not negative if (QAMLUtil.isNumber(height)) { height = height + QAMLConstants.UNIT; } widget.setHeight(height); } } if ("0".equals(width) && "0".equals(height)) { widget.setVisible(false); } } protected void initAvailablitiy(ComponentGVO component, UIObject widget, String uuid, String parent, String context) { if (component == null) { return; } if (widget == null) { return; } if (widget instanceof HasEnabled) { HasEnabled availability = (HasEnabled)widget; boolean enabled = !component.isDisabled(); availability.setEnabled(enabled); } } protected void initStyling(ComponentGVO component, UIObject widget, String uuid, String parent, String context) { if (component == null) { return; } String styleClass = component.getStyleClass(); String[][] inlineStyles = component.getStyleProperties(); ComponentHelper.setStyle(widget, styleClass, inlineStyles); } protected void initStyling(ComponentGVO component, Element element, String uuid, String parent, String context) { if (component == null) { return; } String styleClass = component.getStyleClass(); String[][] inlineStyles = component.getStyleProperties(); initStyling(element, styleClass, inlineStyles, uuid, parent, context); } protected void initStyling(Element element, String styleClass, String[][] inlineStyles, String uuid, String parent, String context) { ComponentHelper.setStyle(element, styleClass, inlineStyles); } protected void initVisibility(ComponentGVO component, UIObject widget, String uuid, String parent, String context) { if (component == null) { return; } if (widget == null) { return; } boolean visible = component.getVisible(); if (!visible) { widget.setVisible(visible); } } protected void initTooltip(ComponentGVO component, UIObject widget, String uuid, String parent, String context) { if (component == null) { return; } if (widget == null) { return; } String tooltip = component.getTooltip(); if (!QAMLUtil.isEmpty(tooltip)) { widget.setTitle(tooltip); } } protected void applyContextMenu(Event event, ComponentGVO finalComponentGVO, String finalUuid, String finalParent) { // TODO not needed? } }