/**
* 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";
}
}