/******************************************************************************* * Copyright 2011 Alex 'Ript' Malyshev <alexript@gmail.com> * * 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 net.autosauler.ballance.client.gui; import java.util.Date; import net.autosauler.ballance.client.gui.images.Images; import net.autosauler.ballance.client.utils.SimpleDateFormat; import net.autosauler.ballance.shared.Field; import net.autosauler.ballance.shared.datatypes.DataTypes; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.data.BaseModelData; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnData; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.user.client.ui.AbstractImagePrototype; /** * A factory for creating DataType objects. * * @author alexript */ public class DataTypeFactory { // TODO: create simple widgets for view public static final SimpleDateFormat formatter = new SimpleDateFormat( "yyyy/MM/dd"); public static final DateTimeFormat dateFormat = DateTimeFormat .getFormat("yyyy/MM/dd"); /** * Adds the cell. * * @param table * the table * @param name * the name * @param field * the field * @param type * the type * @param width * the width * @param defval * the defval */ public static ColumnConfig addCell(Field field, final Object helper) { ColumnConfig column = new ColumnConfig(); final String fieldname = field.getFieldname(); String colname = field.getName().getName( LocaleInfo.getCurrentLocale().getLocaleName()); int width = field.getColumnwidth(); final int type = field.getType(); column.setId(fieldname); column.setHeader(colname); column.setWidth(width); column.setRowHeader(true); if (type == DataTypes.DT_BOOLEAN) { GridCellRenderer<BaseModelData> gridActive = new GridCellRenderer<BaseModelData>() { @Override public Object render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseModelData> store, Grid<BaseModelData> grid) { Boolean isactive = (Boolean) model.get(fieldname); if (isactive) { return AbstractImagePrototype.create(Images.menu.Ok()) .createImage(); } return AbstractImagePrototype.create(Images.menu.Cancel()) .createImage(); } }; column.setAlignment(HorizontalAlignment.CENTER); column.setRenderer(gridActive); } else if (type == DataTypes.DT_DATE) { GridCellRenderer<BaseModelData> gridDate = new GridCellRenderer<BaseModelData>() { @Override public Object render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseModelData> store, Grid<BaseModelData> grid) { Long longdate = (Long) model.get(fieldname); if (longdate == null) { return "---"; } return DataTypeFactory.formatter.format(new Date(longdate)); } }; column.setRenderer(gridDate); } else if (type == DataTypes.DT_CATALOGRECORD) { GridCellRenderer<BaseModelData> gridCatalog = new GridCellRenderer<BaseModelData>() { @Override public Object render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseModelData> store, Grid<BaseModelData> grid) { Object o = DataTypes .fromMapping(type, model.get(fieldname)); Long v = null; try { v = (Long) o; } catch (java.lang.ClassCastException e) { return null; } return ((CatalogPanel) helper).getName(v); } }; column.setRenderer(gridCatalog); } else if (type == DataTypes.DT_DOCUMENTRECORD) { GridCellRenderer<BaseModelData> gridDocument = new GridCellRenderer<BaseModelData>() { @Override public Object render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseModelData> store, Grid<BaseModelData> grid) { Object o = DataTypes .fromMapping(type, model.get(fieldname)); Long v = null; try { v = (Long) o; } catch (java.lang.ClassCastException e) { return null; } return ((DocumentPanel) helper).getName(v); } }; column.setRenderer(gridDocument); } else { // default renderer } return column; } public static ColumnConfig addEditableCell(Field field, final Object helper, ITableFieldChangeHandler changehandler) { ColumnConfig column = new ColumnConfig(); final String fieldname = field.getFieldname(); String colname = field.getName().getName( LocaleInfo.getCurrentLocale().getLocaleName()); int width = field.getColumnwidth(); Object defval = field.getDefval(); final int type = field.getType(); column.setId(fieldname); column.setHeader(colname); column.setWidth(width); column.setRowHeader(true); if (type == DataTypes.DT_BOOLEAN) { GridCellRenderer<BaseModelData> gridActive = new GridCellRenderer<BaseModelData>() { @Override public Object render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseModelData> store, Grid<BaseModelData> grid) { Boolean isactive = (Boolean) model.get(fieldname); if (isactive) { return AbstractImagePrototype.create(Images.menu.Ok()) .createImage(); } return AbstractImagePrototype.create(Images.menu.Cancel()) .createImage(); } }; column.setAlignment(HorizontalAlignment.CENTER); column.setRenderer(gridActive); } else if (type == DataTypes.DT_DATE) { GridCellRenderer<BaseModelData> gridDate = new GridCellRenderer<BaseModelData>() { @Override public Object render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseModelData> store, Grid<BaseModelData> grid) { Date longdate = (Date) model.get(fieldname); if (longdate == null) { return new Date(); } return DataTypeFactory.formatter.format(longdate); } }; column.setRenderer(gridDate); } else if (type == DataTypes.DT_CATALOGRECORD) { GridCellRenderer<BaseModelData> gridCatalog = new GridCellRenderer<BaseModelData>() { @Override public Object render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseModelData> store, Grid<BaseModelData> grid) { return ((CatalogPanel) helper).getName((Long) model .get(fieldname)); } }; column.setRenderer(gridCatalog); } else if (type == DataTypes.DT_DOCUMENTRECORD) { GridCellRenderer<BaseModelData> gridDocument = new GridCellRenderer<BaseModelData>() { @Override public Object render(BaseModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<BaseModelData> store, Grid<BaseModelData> grid) { return ((DocumentPanel) helper).getName((Long) model .get(fieldname)); } }; column.setRenderer(gridDocument); } else { // default renderer } HeaderField hf = new HeaderField(fieldname, type, defval, helper); if (changehandler != null) { hf.setCellChangeHandler(fieldname, changehandler); } column.setEditor(hf.getCellEditor()); return column; } /** * Adds the field. * * @param name * the name * @param field * the field * @param type * the type * @param defval * the defval * @param helper * the helper * @return the header field */ public static HeaderField addField(final String name, final String field, final int type, final Object defval, final Object helper) { HeaderField hf = new HeaderField(name, type, defval, helper); hf.reset(); return hf; } }