/* * Copyright (C) 2000-2012 InfoChamp System Corporation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.gk.engine.client.build.grid.field; import java.util.Map; import org.gk.engine.client.build.grid.XGridField; import org.gk.ui.client.com.form.gkDateRangeField; import org.gk.ui.client.com.form.gkDateRangeField.DateRangeType; import org.gk.ui.client.com.form.gkMap; import org.gk.ui.client.com.grid.column.gkDateRangeColumnConfig; import com.extjs.gxt.ui.client.widget.form.Field; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; public class GDateRangeFieldBuilder extends GridFieldBuilder { public GDateRangeFieldBuilder(String dateRange) { super(dateRange); } @Override public ColumnConfig create() { final XGridField x = (XGridField) getField().clone(); ColumnConfig cc = new gkDateRangeColumnConfig(x) { @Override public void onField(Field field) { setAttribute(field, x); } @Override public Field createField() { String name = x.getName(); String ext = x.getAttribute("ext", ""); String separate = x.getAttribute("separate", "false"); String fmt = x.getFormat(); String value = x.getValue(); String initDate = x.getAttribute("initDate", "false"); String dateWidth = x.getAttribute("dateWidth", ""); String timeWidth = x.getAttribute("timeWidth", ""); String inner = getField().getAttribute("inner", ""); String editable = getField().getAttribute("editable", "true"); gkDateRangeField dates; // dateRange有三種格式,兩日期、兩日期兩時間、一日期兩時間(預設一日期兩時間) if (DateRangeType.DATES.value().equalsIgnoreCase(ext)) { dates = new gkDateRangeField(x.getLabel(), name + "-dateS", name + "-dateE", fmt, Boolean.parseBoolean(separate)) { @Override public void setFieldLabel(String fieldLabel) { super.setFieldLabel(fieldLabel); setHeader(fieldLabel); } }; } else if (DateRangeType.DATESTIMES.value().equalsIgnoreCase( ext)) { dates = new gkDateRangeField(x.getLabel(), name + "-dateS", name + "-timeS", name + "-dateE", name + "-timeE", fmt, Boolean.parseBoolean(separate)) { @Override public void setFieldLabel(String fieldLabel) { super.setFieldLabel(fieldLabel); setHeader(fieldLabel); } }; } else { dates = new gkDateRangeField(x.getLabel(), name + "-dateS", name + "-timeS", name + "-timeE", fmt) { @Override public void setFieldLabel(String fieldLabel) { super.setFieldLabel(fieldLabel); setHeader(fieldLabel); } }; } Map datas = getValues(value); dates.setDefaultBeginDate(chkObj(datas, "dateS")); dates.setDefaultEndDate(chkObj(datas, "dateE")); dates.setDefaultBeginTime(chkObj(datas, "timeS")); dates.setDefaultEndTime(chkObj(datas, "timeE")); // 若initDate="true",設定日期欄位默認為當天日期 if (Boolean.parseBoolean(initDate)) { dates.initDate(); } if (!dateWidth.equals("")) { dates.setDateFieldWidth(dateWidth); } if (!timeWidth.equals("")) { dates.setTimeFieldWidth(timeWidth); } if (!inner.equals("")) { dates.setInnerLabel(inner); } dates.setEditable(Boolean.parseBoolean(editable)); return dates; } }; return cc; } private Map getValues(String value) { // value格式: // 1.value='20090110,200100101' // 2.value='20090110,1100,1200' // 3.value='20090110,1100,200100101,1200' // 其中日期一定要是yyyymmdd八碼,時間為hhmm四碼 Map result = new gkMap(); String[] split = value.split(","); result.put("dateS", split[0]); if (split.length == 2) { result.put("dateE", split[1]); } else if (split.length == 3) { result.put("timeS", split[1]); result.put("timeE", split[2]); } else if (split.length == 4) { result.put("dateE", split[2]); result.put("timeS", split[1]); result.put("timeE", split[3]); } return result; } private String chkObj(Map m, String key) { return m.get(key) == null ? "" : m.get(key).toString(); } }