Guest User

Untitled

a guest
Apr 16th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.54 KB | None | 0 0
  1. package ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client;
  2.  
  3. import com.allen_sauer.gwt.log.client.Log;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6.  
  7. import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
  8. import com.extjs.gxt.ui.client.Style.VerticalAlignment;
  9. import com.extjs.gxt.ui.client.data.BaseModelData;
  10. import com.extjs.gxt.ui.client.store.ListStore;
  11. import com.extjs.gxt.ui.client.widget.HorizontalPanel;
  12. import com.extjs.gxt.ui.client.widget.LayoutContainer;
  13. import com.extjs.gxt.ui.client.widget.Text;
  14. import com.extjs.gxt.ui.client.widget.VerticalPanel;
  15. import com.extjs.gxt.ui.client.widget.form.ComboBox;
  16. import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
  17. import com.extjs.gxt.ui.client.widget.form.DateField;
  18. import com.extjs.gxt.ui.client.widget.form.DateTimePropertyEditor;
  19. import com.google.gwt.i18n.client.DateTimeFormat;
  20. import java.util.Calendar;
  21. import java.util.Date;
  22. import ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.DateTime.*;
  23.  
  24. // TODO: в календаре не должна выбираться дата позже текущей
  25. // TODO: временная зона
  26. public final class DateIntervalCriteria extends LayoutContainer {
  27.  
  28.     // Начало периода
  29.     private DateField startDate = new DateField();
  30.     private ComboBox<Hour> startHour = new ComboBox<Hour>();
  31.     private ComboBox<Minute> startMinute = new ComboBox<Minute>();
  32.     // конечнвй период
  33.     private DateField endDate = new DateField();
  34.     private ComboBox<Hour> endHour = new ComboBox<Hour>();
  35.     private ComboBox<Minute> endMinute = new ComboBox<Minute>();
  36.     /**  Количество минут в одном часе. */
  37.     private final static int MINUTES = 60;
  38.     /** Кличество часов в сутках. */
  39.     private final static int HOURS = 24;
  40.     /** Количество миллисекунд с 1.01.2011. */
  41.     private static final int STARTPOINT = 1293829200;
  42.     /** Значение по умолчанию: часы. */
  43.     private final static String DEFAULT_HOUR = "0";
  44.     /** Значение по умолчанию: минуты. */
  45.     private final static String DEFAULT_MINUTE = "0";
  46.  
  47.     public DateIntervalCriteria() {
  48.         super();
  49.  
  50.         VerticalPanel vPanel = new VerticalPanel();
  51.         vPanel.setSpacing(10);
  52.  
  53.         HorizontalPanel datePanel = new HorizontalPanel();
  54.         datePanel.setHorizontalAlign(HorizontalAlignment.RIGHT);
  55.         datePanel.setVerticalAlign(VerticalAlignment.MIDDLE);
  56.         datePanel.setSpacing(5);
  57.  
  58.         Text selectCriteriaTxt = new Text("Критерии выбора");
  59.         vPanel.add(selectCriteriaTxt);
  60.  
  61.         //  установка формата даты
  62.         DateTimeFormat dateTimeFormat = DateTimeFormat.getFormat("dd.MM.yyyy");
  63.         DateTimePropertyEditor dtpEditor = new DateTimePropertyEditor(dateTimeFormat);
  64.  
  65.         // часы
  66.         ListStore<Hour> hours = new ListStore<Hour>();
  67.         hours.add(getHours());
  68.  
  69.         // минуты
  70.         ListStore<Minute> minutes = new ListStore<Minute>();
  71.         minutes.add(getMinutes());
  72.  
  73.         // период: начальная дата
  74.  
  75.         // дата
  76.         Text startDateTxt = new Text("Период с");
  77.         datePanel.add(startDateTxt);
  78.  
  79.         startDate.setPropertyEditor(dtpEditor);
  80.         startDate.setWidth(90);
  81.         datePanel.add(startDate);
  82.  
  83.         // часы
  84.         startHour.setWidth(150);
  85.         startHour.setStore(hours);
  86.         startHour.setDisplayField("hour");
  87.         startHour.setTypeAhead(true);
  88.         startHour.setTriggerAction(TriggerAction.ALL);
  89.         startHour.setWidth(50);
  90.         datePanel.add(startHour);
  91.  
  92.         // минуты
  93.         startMinute.setWidth(150);
  94.         startMinute.setStore(minutes);
  95.         startMinute.setDisplayField("minute");
  96.         startMinute.setTypeAhead(true);
  97.         startMinute.setTriggerAction(TriggerAction.ALL);
  98.         startMinute.setWidth(50);
  99.         datePanel.add(startMinute);
  100.  
  101.         // период: конечная дата
  102.         Text endDateTxt = new Text("по");
  103.         datePanel.add(endDateTxt);
  104.  
  105.         // дата
  106.         endDate.setPropertyEditor(dtpEditor);
  107.         endDate.setWidth(90);
  108.         datePanel.add(endDate);
  109.  
  110.         // часы    
  111.         endHour.setWidth(150);
  112.         endHour.setStore(hours);
  113.         endHour.setDisplayField("hour");
  114.         endHour.setTypeAhead(true);
  115.         endHour.setTriggerAction(TriggerAction.ALL);
  116.         endHour.setWidth(50);
  117.         datePanel.add(endHour);
  118.  
  119.         // минуты    
  120.         endMinute.setWidth(150);
  121.         endMinute.setStore(minutes);
  122.         endMinute.setDisplayField("minute");
  123.         endMinute.setTypeAhead(true);
  124.         endMinute.setTriggerAction(TriggerAction.ALL);
  125.         endMinute.setWidth(50);
  126.         datePanel.add(endMinute);
  127.  
  128.         // усьановка периода по умолчнию
  129.         setPeriod(getDefaultStartDate(), getDefaultEndDate());
  130.  
  131.         vPanel.add(datePanel);
  132.  
  133.         add(vPanel);
  134.     }
  135.  
  136.     private static List<Hour> getHours() {
  137.         List<Hour> hours = new ArrayList<Hour>();
  138.  
  139.         for (int i = 0; i < HOURS; i++) {
  140.             hours.add(new Hour(String.valueOf(i)));
  141.         }
  142.  
  143.         return hours;
  144.     }
  145.  
  146.     private static List<Minute> getMinutes() {
  147.         List<Minute> minutes = new ArrayList<Minute>();
  148.  
  149.         for (int i = 0; i < MINUTES; i++) {
  150.             minutes.add(new Minute(String.valueOf(i)));
  151.         }
  152.  
  153.         return minutes;
  154.     }
  155.  
  156.     public void setPeriod(DateTime start, DateTime end) {
  157.         if (start == null || end == null) {
  158.             return;
  159.         }
  160.  
  161.         startDate.setValue(start.getDate());
  162.         startHour.setValue(start.getHour());
  163.         startMinute.setValue(start.getMinute());
  164.         endDate.setValue(end.getDate());
  165.         endHour.setValue(end.getHour());
  166.         endMinute.setValue(end.getMinute());
  167.     }
  168.  
  169.     /**
  170.      * Получает общее количество миллисекунд начальной даты периода.
  171.      * @return Количество миллисекунд начальной даты периода.
  172.      */
  173.     private Long getStartDateTimestamp() {
  174.         if (startDate.getDatePicker().getValue() == null
  175.                 || startHour.getValue() == null
  176.                 || startMinute.getValue() == null) {
  177.  
  178.             DateTime startDateTime = getDefaultStartDate();
  179.  
  180.             startDate.getDatePicker().setValue(startDateTime.getDate());
  181.             startHour.setValue(startDateTime.getHour());
  182.             startMinute.setValue(startDateTime.getMinute());
  183.         }
  184.  
  185.         Long timestamp = 0l;
  186.  
  187.         Date date = startDate.getDatePicker().getValue();
  188.         timestamp = timestamp + date.getTime();
  189.  
  190.         Hour hour = startHour.getValue();
  191.         timestamp = timestamp + strToInt(hour.getHour());
  192.  
  193.         Minute minute = startMinute.getValue();
  194.         timestamp = timestamp + strToInt(minute.getMinute());
  195.  
  196.         return timestamp;
  197.     }
  198.  
  199.     /**
  200.      * Получает общее количество миллисекунд конечной даты периода.
  201.      * @return Количество миллисекунд конечной даты периода.
  202.      */
  203.     private Long getEndDateTimestamp() {
  204.         if (endDate.getDatePicker().getValue() == null
  205.                 || endHour.getValue() == null
  206.                 || endMinute.getValue() == null) {
  207.  
  208.             DateTime endDateTime = getDefaultEndDate();
  209.  
  210.             endDate.getDatePicker().setValue(endDateTime.getDate());
  211.             endHour.setValue(endDateTime.getHour());
  212.             endMinute.setValue(endDateTime.getMinute());
  213.         }
  214.  
  215.         Long timestamp = 0l;
  216.  
  217.         Date date = endDate.getDatePicker().getValue();
  218.         timestamp = timestamp + date.getTime();
  219.  
  220.         Hour hour = endHour.getValue();
  221.         timestamp = timestamp + strToInt(hour.getHour());
  222.  
  223.         Minute minute = endMinute.getValue();
  224.         timestamp = timestamp + strToInt(minute.getMinute());
  225.  
  226.         return timestamp;
  227.     }
  228.  
  229.     /**
  230.      * Перевод количества миллисекунд в секунды от 1.01.2011.
  231.      * @param timestamp
  232.      * @return Число миллисекунд от 1.01.2011.
  233.      */
  234.     private Integer toSecond(Long timestamp) {
  235.         return (int) ((timestamp - STARTPOINT) / 1000);
  236.     }
  237.  
  238.     /**
  239.      * Возвращает в секундах начльный дату периода.
  240.      * @return Количество секунд от 1.01.2011.
  241.      */
  242.     public Integer getStartDate() {
  243.         return toSecond(getStartDateTimestamp());
  244.     }
  245.  
  246.     /**
  247.      * Возвращает в секундах начльный дату периода.
  248.      * @return Количество секунд от 1.01.2011.
  249.      */
  250.     public Integer getEndDate() {
  251.         return toSecond(getEndDateTimestamp());
  252.     }
  253.  
  254.     /**
  255.      * Формирует и возвращает конечную дату периода по умолчанию.
  256.      *
  257.      * @return Дата в виде {@link DateTime}.
  258.      */
  259.     public DateTime getDefaultStartDate() {
  260.         Calendar calendar = Calendar.getInstance();
  261.         calendar.add(Calendar.DAY_OF_MONTH, Calendar.MONDAY - calendar.get(Calendar.DAY_OF_WEEK));
  262.         Date startDate = new Date(calendar.getTimeInMillis());
  263.         return new DateTime(startDate, new Hour(DEFAULT_HOUR), new Minute(DEFAULT_MINUTE));
  264.  
  265.     }
  266.  
  267.     /**
  268.      * Формирует и возвращает нальную дату периода по умолчанию.
  269.      *
  270.      * @return Дата в виде {@link DateTime}.
  271.      */
  272.     public DateTime getDefaultEndDate() {
  273.         return new DateTime(new Date(), new Hour(DEFAULT_HOUR), new Minute(DEFAULT_MINUTE));
  274.     }
  275.  
  276.     // TODO: перенести в другой класс
  277.     /**
  278.      * Конвертация строки в число целого типа. В случае ошибки возвращает 0.
  279.      * @param str Строка, которую необходимо перевести в число.
  280.      * @return Число целого типа.
  281.      */
  282.     private Integer strToInt(String str) {
  283.         Integer num = 0;
  284.         try {
  285.             num = Integer.parseInt(str);
  286.         } catch (NumberFormatException ex) {
  287.             Log.error("Ошибка при конвертации в число строки " + str, ex);
  288.             return 0;
  289.         }
  290.         return num;
  291.     }
  292. }
Add Comment
Please, Sign In to add comment