Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client;
- import com.allen_sauer.gwt.log.client.Log;
- import java.util.ArrayList;
- import java.util.List;
- import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
- import com.extjs.gxt.ui.client.Style.VerticalAlignment;
- import com.extjs.gxt.ui.client.data.BaseModelData;
- import com.extjs.gxt.ui.client.store.ListStore;
- import com.extjs.gxt.ui.client.widget.HorizontalPanel;
- import com.extjs.gxt.ui.client.widget.LayoutContainer;
- import com.extjs.gxt.ui.client.widget.Text;
- import com.extjs.gxt.ui.client.widget.VerticalPanel;
- import com.extjs.gxt.ui.client.widget.form.ComboBox;
- import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
- import com.extjs.gxt.ui.client.widget.form.DateField;
- import com.extjs.gxt.ui.client.widget.form.DateTimePropertyEditor;
- import com.google.gwt.i18n.client.DateTimeFormat;
- import java.util.Calendar;
- import java.util.Date;
- import ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.DateTime.*;
- // TODO: в календаре не должна выбираться дата позже текущей
- // TODO: временная зона
- public final class DateIntervalCriteria extends LayoutContainer {
- // Начало периода
- private DateField startDate = new DateField();
- private ComboBox<Hour> startHour = new ComboBox<Hour>();
- private ComboBox<Minute> startMinute = new ComboBox<Minute>();
- // конечнвй период
- private DateField endDate = new DateField();
- private ComboBox<Hour> endHour = new ComboBox<Hour>();
- private ComboBox<Minute> endMinute = new ComboBox<Minute>();
- /** Количество минут в одном часе. */
- private final static int MINUTES = 60;
- /** Кличество часов в сутках. */
- private final static int HOURS = 24;
- /** Количество миллисекунд с 1.01.2011. */
- private static final int STARTPOINT = 1293829200;
- /** Значение по умолчанию: часы. */
- private final static String DEFAULT_HOUR = "0";
- /** Значение по умолчанию: минуты. */
- private final static String DEFAULT_MINUTE = "0";
- public DateIntervalCriteria() {
- super();
- VerticalPanel vPanel = new VerticalPanel();
- vPanel.setSpacing(10);
- HorizontalPanel datePanel = new HorizontalPanel();
- datePanel.setHorizontalAlign(HorizontalAlignment.RIGHT);
- datePanel.setVerticalAlign(VerticalAlignment.MIDDLE);
- datePanel.setSpacing(5);
- Text selectCriteriaTxt = new Text("Критерии выбора");
- vPanel.add(selectCriteriaTxt);
- // установка формата даты
- DateTimeFormat dateTimeFormat = DateTimeFormat.getFormat("dd.MM.yyyy");
- DateTimePropertyEditor dtpEditor = new DateTimePropertyEditor(dateTimeFormat);
- // часы
- ListStore<Hour> hours = new ListStore<Hour>();
- hours.add(getHours());
- // минуты
- ListStore<Minute> minutes = new ListStore<Minute>();
- minutes.add(getMinutes());
- // период: начальная дата
- // дата
- Text startDateTxt = new Text("Период с");
- datePanel.add(startDateTxt);
- startDate.setPropertyEditor(dtpEditor);
- startDate.setWidth(90);
- datePanel.add(startDate);
- // часы
- startHour.setWidth(150);
- startHour.setStore(hours);
- startHour.setDisplayField("hour");
- startHour.setTypeAhead(true);
- startHour.setTriggerAction(TriggerAction.ALL);
- startHour.setWidth(50);
- datePanel.add(startHour);
- // минуты
- startMinute.setWidth(150);
- startMinute.setStore(minutes);
- startMinute.setDisplayField("minute");
- startMinute.setTypeAhead(true);
- startMinute.setTriggerAction(TriggerAction.ALL);
- startMinute.setWidth(50);
- datePanel.add(startMinute);
- // период: конечная дата
- Text endDateTxt = new Text("по");
- datePanel.add(endDateTxt);
- // дата
- endDate.setPropertyEditor(dtpEditor);
- endDate.setWidth(90);
- datePanel.add(endDate);
- // часы
- endHour.setWidth(150);
- endHour.setStore(hours);
- endHour.setDisplayField("hour");
- endHour.setTypeAhead(true);
- endHour.setTriggerAction(TriggerAction.ALL);
- endHour.setWidth(50);
- datePanel.add(endHour);
- // минуты
- endMinute.setWidth(150);
- endMinute.setStore(minutes);
- endMinute.setDisplayField("minute");
- endMinute.setTypeAhead(true);
- endMinute.setTriggerAction(TriggerAction.ALL);
- endMinute.setWidth(50);
- datePanel.add(endMinute);
- // усьановка периода по умолчнию
- setPeriod(getDefaultStartDate(), getDefaultEndDate());
- vPanel.add(datePanel);
- add(vPanel);
- }
- private static List<Hour> getHours() {
- List<Hour> hours = new ArrayList<Hour>();
- for (int i = 0; i < HOURS; i++) {
- hours.add(new Hour(String.valueOf(i)));
- }
- return hours;
- }
- private static List<Minute> getMinutes() {
- List<Minute> minutes = new ArrayList<Minute>();
- for (int i = 0; i < MINUTES; i++) {
- minutes.add(new Minute(String.valueOf(i)));
- }
- return minutes;
- }
- public void setPeriod(DateTime start, DateTime end) {
- if (start == null || end == null) {
- return;
- }
- startDate.setValue(start.getDate());
- startHour.setValue(start.getHour());
- startMinute.setValue(start.getMinute());
- endDate.setValue(end.getDate());
- endHour.setValue(end.getHour());
- endMinute.setValue(end.getMinute());
- }
- /**
- * Получает общее количество миллисекунд начальной даты периода.
- * @return Количество миллисекунд начальной даты периода.
- */
- private Long getStartDateTimestamp() {
- if (startDate.getDatePicker().getValue() == null
- || startHour.getValue() == null
- || startMinute.getValue() == null) {
- DateTime startDateTime = getDefaultStartDate();
- startDate.getDatePicker().setValue(startDateTime.getDate());
- startHour.setValue(startDateTime.getHour());
- startMinute.setValue(startDateTime.getMinute());
- }
- Long timestamp = 0l;
- Date date = startDate.getDatePicker().getValue();
- timestamp = timestamp + date.getTime();
- Hour hour = startHour.getValue();
- timestamp = timestamp + strToInt(hour.getHour());
- Minute minute = startMinute.getValue();
- timestamp = timestamp + strToInt(minute.getMinute());
- return timestamp;
- }
- /**
- * Получает общее количество миллисекунд конечной даты периода.
- * @return Количество миллисекунд конечной даты периода.
- */
- private Long getEndDateTimestamp() {
- if (endDate.getDatePicker().getValue() == null
- || endHour.getValue() == null
- || endMinute.getValue() == null) {
- DateTime endDateTime = getDefaultEndDate();
- endDate.getDatePicker().setValue(endDateTime.getDate());
- endHour.setValue(endDateTime.getHour());
- endMinute.setValue(endDateTime.getMinute());
- }
- Long timestamp = 0l;
- Date date = endDate.getDatePicker().getValue();
- timestamp = timestamp + date.getTime();
- Hour hour = endHour.getValue();
- timestamp = timestamp + strToInt(hour.getHour());
- Minute minute = endMinute.getValue();
- timestamp = timestamp + strToInt(minute.getMinute());
- return timestamp;
- }
- /**
- * Перевод количества миллисекунд в секунды от 1.01.2011.
- * @param timestamp
- * @return Число миллисекунд от 1.01.2011.
- */
- private Integer toSecond(Long timestamp) {
- return (int) ((timestamp - STARTPOINT) / 1000);
- }
- /**
- * Возвращает в секундах начльный дату периода.
- * @return Количество секунд от 1.01.2011.
- */
- public Integer getStartDate() {
- return toSecond(getStartDateTimestamp());
- }
- /**
- * Возвращает в секундах начльный дату периода.
- * @return Количество секунд от 1.01.2011.
- */
- public Integer getEndDate() {
- return toSecond(getEndDateTimestamp());
- }
- /**
- * Формирует и возвращает конечную дату периода по умолчанию.
- *
- * @return Дата в виде {@link DateTime}.
- */
- public DateTime getDefaultStartDate() {
- Calendar calendar = Calendar.getInstance();
- calendar.add(Calendar.DAY_OF_MONTH, Calendar.MONDAY - calendar.get(Calendar.DAY_OF_WEEK));
- Date startDate = new Date(calendar.getTimeInMillis());
- return new DateTime(startDate, new Hour(DEFAULT_HOUR), new Minute(DEFAULT_MINUTE));
- }
- /**
- * Формирует и возвращает нальную дату периода по умолчанию.
- *
- * @return Дата в виде {@link DateTime}.
- */
- public DateTime getDefaultEndDate() {
- return new DateTime(new Date(), new Hour(DEFAULT_HOUR), new Minute(DEFAULT_MINUTE));
- }
- // TODO: перенести в другой класс
- /**
- * Конвертация строки в число целого типа. В случае ошибки возвращает 0.
- * @param str Строка, которую необходимо перевести в число.
- * @return Число целого типа.
- */
- private Integer strToInt(String str) {
- Integer num = 0;
- try {
- num = Integer.parseInt(str);
- } catch (NumberFormatException ex) {
- Log.error("Ошибка при конвертации в число строки " + str, ex);
- return 0;
- }
- return num;
- }
- }
Add Comment
Please, Sign In to add comment