/** * 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.gwt.server.ui.assembler; import java.util.Iterator; import com.qualogy.qafe.bind.core.application.ApplicationContext; import com.qualogy.qafe.bind.domain.ApplicationMapping; import com.qualogy.qafe.bind.presentation.component.Component; import com.qualogy.qafe.bind.presentation.component.DataGrid; import com.qualogy.qafe.bind.presentation.component.DataGridColumn; import com.qualogy.qafe.bind.presentation.component.Window; import com.qualogy.qafe.gwt.client.vo.ui.ComponentGVO; import com.qualogy.qafe.gwt.client.vo.ui.DataGridColumnGVO; import com.qualogy.qafe.gwt.client.vo.ui.DataGridGVO; import com.qualogy.qafe.gwt.client.vo.ui.HiddenGVO; import com.qualogy.qafe.gwt.client.vo.ui.ImageGVO; import com.qualogy.qafe.gwt.client.vo.ui.PanelGVO; import com.qualogy.qafe.gwt.server.helper.UIAssemblerHelper; import com.qualogy.qafe.web.util.SessionContainer; /** * Class to transform a domain object generated by JIBX to a GVO * * @author jroosing * */ public class DataGridUIAssembler implements UIAssembler { public DataGridUIAssembler() { } @Override public final ComponentGVO convert(final Component object, final Window currentWindow, final ApplicationMapping applicationMapping, final ApplicationContext context, final SessionContainer ss) { if (object == null || !(object instanceof DataGrid)) { return null; } final DataGrid dataGrid = (DataGrid) object; final DataGridGVO dataGridGVO = new DataGridGVO(); UIAssemblerHelper.copyFields(dataGrid, currentWindow, dataGridGVO, applicationMapping, context, ss); setGeneralProperties(dataGridGVO, dataGrid); setOverflowProperties(currentWindow, applicationMapping, context, ss, dataGrid, dataGridGVO); final int totalWidthOfColumns = setDataGridGVOColumns(currentWindow, applicationMapping, context, ss, dataGrid, dataGridGVO); setDimensionProperties(totalWidthOfColumns, dataGridGVO); setCrudProperties(dataGrid, dataGridGVO); setPageSizeProperties(dataGrid, dataGridGVO); return dataGridGVO; } private void setOverflowProperties(final Window currentWindow, final ApplicationMapping applicationMapping, final ApplicationContext context, final SessionContainer ss, final DataGrid dataGrid, final DataGridGVO voTemp) { if (dataGrid.hasOverflow()) { voTemp.setOverflow((PanelGVO) ComponentUIAssembler.convert(dataGrid.getOverflow(), currentWindow, applicationMapping, context, ss)); } } private void setDimensionProperties(final int totalWidthOfColumns, final DataGridGVO voTemp) { // http://livedocs.adobe.com/flex/3/langref/mx/controls/DataGrid.html if (voTemp.getWidth() == null) { if (totalWidthOfColumns > 0) { voTemp.setWidth(totalWidthOfColumns + "px"); } else { voTemp.setWidth("300px"); } } // Since the datagrid is inspired by the Flex Datagrid, we apply the same rules. if (voTemp.getHeight() == null || voTemp.getHeight().trim().length() == 0) { voTemp.setHeight("140px"); } } private void setPageSizeProperties(final DataGrid dataGrid, final DataGridGVO voTemp) { if (dataGrid.getPageSize() != null && dataGrid.getPageSize().intValue() > 0) { voTemp.setPageSizeComponent(createHiddenComponent(dataGrid, "pagesize", dataGrid.getPageSize())); voTemp.setPageSize(dataGrid.getPageSize()); voTemp.setOffSetComponent(createHiddenComponent(dataGrid, "offset", "0")); } } private void setCrudProperties(final DataGrid dataGrid, final DataGridGVO voTemp) { if (dataGrid.getDelete().booleanValue() || dataGrid.getAdd().booleanValue() || dataGrid.getEditable().booleanValue()) { if (dataGrid.getSave()) { voTemp.setSaveComponent(createImage(dataGrid, "save", "images/save.png", "Save changes", dataGrid.getId())); } if (dataGrid.getRefresh()) { voTemp.setRefreshComponent(createImage(dataGrid, "refresh", "images/refresh.png", "Refresh Data", dataGrid.getId())); } if (dataGrid.getCancel()) { voTemp.setCancelComponent(createImage(dataGrid, "cancel", "images/undo.png", "Undo changes", dataGrid.getId())); } } if (dataGrid.getDelete().booleanValue()) { voTemp.setDeleteComponent(createImage(dataGrid, "delete", "images/delete.png", "Delete record(s)", dataGrid.getId())); } if (dataGrid.getAdd().booleanValue()) { voTemp.setAddComponent(createImage(dataGrid, "add", "images/add.gif", "Add a new record", dataGrid.getId())); } if (dataGrid.getExport().booleanValue()) { voTemp.setExportComponent(createImage(dataGrid, "export", "images/export.gif", "Export", dataGrid.getId())); } } private int setDataGridGVOColumns(final Window currentWindow, final ApplicationMapping applicationMapping, final ApplicationContext context, final SessionContainer ss, final DataGrid dataGrid, final DataGridGVO voTemp) { int columnWidth = 0; if (dataGrid.getColumns() != null) { final Iterator<DataGridColumn> itr = dataGrid.getColumns().iterator(); final DataGridColumnGVO[] columns = new DataGridColumnGVO[dataGrid.getColumns().size()]; int index = 0; while (itr.hasNext()) { columns[index] = (DataGridColumnGVO) ComponentUIAssembler.convert(itr.next(), currentWindow, applicationMapping, context, ss); columns[index].setContainerName(dataGrid.getId()); if (!dataGrid.getEditable()) { // When the parent is not editable, // all its children should not be editable also columns[index].setEditable(dataGrid.getEditable()); } if (columns[index].getWidth() != null) { columnWidth += Integer.parseInt(columns[index].getWidth()); } index++; } voTemp.setColumns(columns); } return columnWidth; } private void setGeneralProperties(final DataGridGVO voTemp, final DataGrid dataGrid) { voTemp.setMaxRows(dataGrid.getMaxRows()); voTemp.setPageSize(dataGrid.getPageSize()); voTemp.setPageScroll(dataGrid.getPageScroll()); voTemp.setMinRows(dataGrid.getMinRows()); voTemp.setDelete(dataGrid.getDelete()); voTemp.setAdd(dataGrid.getAdd()); voTemp.setExport(dataGrid.getExport()); voTemp.setExportFormats(dataGrid.getExportFormats()); voTemp.setImportEnabled(dataGrid.getImportEnabled()); voTemp.setImportAction(dataGrid.getImportAction()); voTemp.setMultipleSelect(dataGrid.getMultipleSelect()); voTemp.setSelectFirstRow(dataGrid.getSelectFirstRow()); voTemp.setSave(dataGrid.getSave()); voTemp.setCancel(dataGrid.getCancel()); voTemp.setRefresh(dataGrid.getRefresh()); voTemp.setOverflowGroup(dataGrid.getOverflowGroup()); if (dataGrid.getRowColors() != null) { voTemp.setRowColors((dataGrid.getRowColors().trim()).split(",")); } } private ComponentGVO createImage(final DataGrid dataGrid, final String id, final String imageUrl, final String description, final String parent) { final ImageGVO imageGVO = new ImageGVO(); imageGVO.setParent(parent); imageGVO.setDescription(description); imageGVO.setImageLocation(imageUrl); imageGVO.setId(dataGrid.getId() + "." + id); return imageGVO; } private ComponentGVO createHiddenComponent(final DataGrid dataGrid, final String id, final Object value) { final HiddenGVO hiddenGVO = new HiddenGVO(); hiddenGVO.setId(dataGrid.getId() + "." + id); hiddenGVO.setValue(value.toString()); return hiddenGVO; } @Override public final String getStaticStyleName() { return "datagrid"; } }