com.qualogy.qafe.gwt.client.component.Tiles.java Source code

Java tutorial

Introduction

Here is the source code for com.qualogy.qafe.gwt.client.component.Tiles.java

Source

/**
 * Copyright 2008-2015 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.gwt.client.component;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.qualogy.qafe.gwt.client.ui.renderer.AnyComponentRenderer;
import com.qualogy.qafe.gwt.client.ui.renderer.RendererHelper;
import com.qualogy.qafe.gwt.client.util.ComponentRepository;
import com.qualogy.qafe.gwt.client.util.QAMLConstants;
import com.qualogy.qafe.gwt.client.vo.functions.DataContainerGVO;
import com.qualogy.qafe.gwt.client.vo.functions.SetValueGVO;
import com.qualogy.qafe.gwt.client.vo.functions.execute.SetValueExecute;
import com.qualogy.qafe.gwt.client.vo.ui.ComponentGVO;

public class Tiles extends FlexTable {

    private List<UIObject> tileElements = new ArrayList<UIObject>();

    public List<UIObject> getTileElements() {
        return tileElements;
    }

    public void setTileElements(List<UIObject> tileElements) {
        this.tileElements = tileElements;
    }

    private ComponentGVO innerComponent;
    private int colCount;

    public ComponentGVO getInnerComponent() {
        return innerComponent;
    }

    public void setInnerComponent(ComponentGVO innerComponent) {
        this.innerComponent = innerComponent;
    }

    public int getColCount() {
        return colCount;
    }

    public void setColCount(int colCount) {
        this.colCount = colCount;
    }

    public void fillDataFromMap(DataContainerGVO data, SetValueGVO setValueGVO) {

        List<DataContainerGVO> temp = new ArrayList<DataContainerGVO>();
        temp.add(data);
        fillDataFromMapList(temp, setValueGVO);
    }

    /**
     * This methods fills the widget values from the list of DataMap data type. 
     * @param List<DataMap> listDataToFill
     * @param SetValueGVO setValueGVO
     */
    public void fillDataFromMapList(List<DataContainerGVO> listDataToFill, SetValueGVO setValueGVO) {
        int index = tileElements.size();
        int row = tileElements.size() / getColCount();
        int col = tileElements.size() % getColCount();

        for (DataContainerGVO object : listDataToFill) {
            String parentComponent = DOM.getElementAttribute(getElement(), "pc");
            UIObject child = AnyComponentRenderer.getInstance().render(getInnerComponent(),
                    getInnerComponent().getUuid(), parentComponent, getInnerComponent().getContext());
            tileElements.add(child);
            assignIndex(child, index);
            RendererHelper.storeComponent(getInnerComponent(), getInnerComponent().getUuid(), child,
                    parentComponent, getInnerComponent().getContext() + QAMLConstants.TOKEN_INDEXING + index
                            + QAMLConstants.TOKEN_INDEXING);
            RendererHelper.addName(getInnerComponent(), child, getInnerComponent().getUuid(), parentComponent,
                    getInnerComponent().getContext() + QAMLConstants.TOKEN_INDEXING + index
                            + QAMLConstants.TOKEN_INDEXING);

            this.setWidget(row, col, (Widget) child);
            if (col == (getColCount() - 1)) {
                row++;
                col = 0;
            } else if (col < (getColCount() - 1)) {
                col++;
            }

            if (child instanceof HasWidgets) {
                fillWidget(child, object, setValueGVO);
            }
            index++;
        }
    }

    /**
     * This methods fills the widget values from the list of String data type.
     * @param List<String> listOfString
     * @param SetValueGVO setValueGVO
     */
    public void fillDataFromStringList(List<String> listOfString, SetValueGVO setValueGVO) {
        int row = 1;
        int col = 1;
        int colCount = getColCount();
        for (String object : listOfString) {
            UIObject child = AnyComponentRenderer.getInstance().render(this.getInnerComponent(),
                    this.getInnerComponent().getUuid(), DOM.getElementAttribute(this.getElement(), "pc"),
                    this.getInnerComponent().getContext());
            this.setWidget(row, col, (Widget) child);
            if (col == colCount) {
                row++;
                col = 1;
            } else if (col < colCount)
                col++;
            if (child instanceof HasWidgets) {
                HasWidgets hasWidgets = (HasWidgets) child;
                Iterator<Widget> itr = hasWidgets.iterator();
                while (itr.hasNext()) {
                    Widget widget = itr.next();
                    if (RendererHelper.isNamedComponent(widget)) {
                        DataContainerGVO valueDTC = new DataContainerGVO(object);
                        SetValueExecute.processValue(widget, object, setValueGVO, valueDTC);
                    }
                }
            } else if (child instanceof Widget) {
                DataContainerGVO valueDTC = new DataContainerGVO(object);
                SetValueExecute.processValue(child, object, setValueGVO, valueDTC);
            }

        }
    }

    /**
     * This method assigns the value to the UIObject with data given in the Object paramter.
     * @param UIObject uiObject
     * @param Object valueToFill
     * @param SetValueGVO setValueGVO
     */
    private void fillWidget(UIObject uiObject, Object valueToFill, SetValueGVO setValueGVO) {
        if (uiObject instanceof HasWidgets) {
            HasWidgets hasWidgets = (HasWidgets) uiObject;
            Iterator<Widget> itr = hasWidgets.iterator();
            while (itr.hasNext()) {
                Widget widget = itr.next();
                if (RendererHelper.isNamedComponent(widget)) {
                    String name = RendererHelper.getNamedComponentName(widget);
                    if (((DataContainerGVO) valueToFill).isMap()) {
                        //DataMap val = (DataMap)valueToFill;
                        DataMap val = ((DataContainerGVO) valueToFill).getDataMap();
                        DataContainerGVO data = val.get(name);
                        if (data != null) {
                            Object dataToSet;
                            if (data != null && data.getKind() == DataContainerGVO.KIND_COLLECTION
                                    || data.getKind() == DataContainerGVO.KIND_MAP) {
                                dataToSet = data.getListofDC();
                            } else {
                                dataToSet = DataContainerGVO.createType(data);
                                dataToSet = dataToSet == null ? null : dataToSet.toString();
                            }
                            SetValueExecute.processValue(widget, dataToSet, setValueGVO, data);
                        }
                    } else if (((DataContainerGVO) valueToFill).getKind() == DataContainerGVO.KIND_COLLECTION) {
                        //List val = (List)valueToFill;
                        List val = ((DataContainerGVO) valueToFill).getListofDC();
                        for (int i = 0; i < val.size(); i++) {
                            if (val.get(i) != null) {
                                fillWidget((UIObject) widget, val.get(i), setValueGVO);
                            }
                        }
                    } else {
                        if (valueToFill.toString() != null) {
                            DataContainerGVO valueDTC = new DataContainerGVO(valueToFill.toString());
                            SetValueExecute.processValue(widget, valueToFill.toString(), setValueGVO, valueDTC);
                        }
                    }

                }
                if (widget instanceof HasWidgets) {
                    HasWidgets innerHasWidget = (HasWidgets) widget;
                    fillWidget((UIObject) innerHasWidget, valueToFill, setValueGVO);
                }
            }
        }
    }

    /**
     * This method assigns index for the elements in the FlexTable.
     * Assigning index enables tracking events on specific element.
     * @param UIObject child
     */
    private void assignIndex(UIObject child, int index) {
        String tileId = DOM.getElementAttribute((Element) child.getElement(), "id");
        String tempTileId = "";
        if (tileId != null && tileId.length() > 0) {
            tempTileId = tileId + QAMLConstants.TOKEN_INDEXING + index + QAMLConstants.TOKEN_INDEXING;

            DOM.setElementAttribute((Element) child.getElement(), "id", tempTileId);
            ComponentRepository.getInstance().putComponent(tempTileId, child);
        }
        if (child instanceof HasWidgets) {
            HasWidgets hasWidgets = (HasWidgets) child;
            Iterator<Widget> itr = hasWidgets.iterator();
            while (itr.hasNext()) {
                Widget widget = itr.next();
                if (widget instanceof HasWidgets) {
                    assignIndex(widget, index);
                }
                String eleId = DOM.getElementAttribute((Element) widget.getElement(), "id");
                String tempStr = "";
                if (eleId != null && eleId.length() > 0) {
                    int exist = eleId.indexOf(QAMLConstants.TOKEN_INDEXING);
                    if (exist < 0) {
                        tempStr = QAMLConstants.TOKEN_INDEXING + index + QAMLConstants.TOKEN_INDEXING + eleId;
                        DOM.setElementAttribute((Element) widget.getElement(), "id", tempStr);
                        ComponentRepository.getInstance().remove(eleId);
                        ComponentRepository.getInstance().putComponent(tempStr, widget);
                    }
                }
            }
        }
        ComponentRepository.getInstance().remove(tileId);
    }
}