Java tutorial
/** * 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); } }