Example usage for org.joda.time Seconds secondsIn

List of usage examples for org.joda.time Seconds secondsIn

Introduction

In this page you can find the example usage for org.joda.time Seconds secondsIn.

Prototype

public static Seconds secondsIn(ReadableInterval interval) 

Source Link

Document

Creates a Seconds representing the number of whole seconds in the specified interval.

Usage

From source file:com.cisco.dvbu.ps.utils.date.DateDiffTimestamp.java

License:Open Source License

/**
 * Called to invoke the stored procedure.  Will only be called a
 * single time per instance.  Can throw CustomProcedureException or
 * SQLException if there is an error during invoke.
 *///  w w  w  .  java  2s . co m
public void invoke(Object[] inputValues) throws CustomProcedureException, SQLException {
    Timestamp startTimestamp = null;
    Timestamp endTimestamp = null;
    Calendar startCal = null;
    Calendar endCal = null;
    DateTime startDateTime = null;
    DateTime endDateTime = null;
    String datePart = null;
    long dateLength = 0;

    try {
        result = null;
        if (inputValues[0] == null) {
            result = new Long(dateLength);
            return;
        }

        if (inputValues[1] == null) {
            result = new Long(dateLength);
            return;
        }

        if (inputValues[2] == null) {
            result = new Long(dateLength);
            return;
        }

        datePart = (String) inputValues[0];
        startTimestamp = (Timestamp) inputValues[1];
        // long startMilliseconds = startTimestamp.getTime() +
        // (startTimestamp.getNanos() / 1000000);
        long startMilliseconds = startTimestamp.getTime()
                + (startTimestamp.getNanos() % 1000000L >= 500000L ? 1 : 0);
        startCal = Calendar.getInstance();
        startCal.setTimeInMillis(startMilliseconds);

        endTimestamp = (Timestamp) inputValues[2];
        // long endMilliseconds = endTimestamp.getTime() +
        // (endTimestamp.getNanos() / 1000000);
        long endMilliseconds = endTimestamp.getTime() + (endTimestamp.getNanos() % 1000000L >= 500000L ? 1 : 0);

        endCal = Calendar.getInstance();
        endCal.setTimeInMillis(endMilliseconds);

        startDateTime = new DateTime(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH) + 1,
                startCal.get(Calendar.DAY_OF_MONTH), startCal.get(Calendar.HOUR_OF_DAY),
                startCal.get(Calendar.MINUTE), startCal.get(Calendar.SECOND),
                startCal.get(Calendar.MILLISECOND));
        endDateTime = new DateTime(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH) + 1,
                endCal.get(Calendar.DAY_OF_MONTH), endCal.get(Calendar.HOUR_OF_DAY),
                endCal.get(Calendar.MINUTE), endCal.get(Calendar.SECOND), endCal.get(Calendar.MILLISECOND));

        Interval interval = new Interval(startDateTime, endDateTime);

        if (datePart.equalsIgnoreCase("second") || datePart.equalsIgnoreCase("ss")) {
            Seconds seconds = Seconds.secondsIn(interval);
            dateLength = seconds.getSeconds();
        } else if (datePart.equalsIgnoreCase("minute") || datePart.equalsIgnoreCase("mi")) {
            Minutes minutes = Minutes.minutesIn(interval);
            dateLength = minutes.getMinutes();
        } else if (datePart.equalsIgnoreCase("hour") || datePart.equalsIgnoreCase("hh")) {
            Hours hours = Hours.hoursIn(interval);
            dateLength = hours.getHours();
        } else if (datePart.equalsIgnoreCase("day") || datePart.equalsIgnoreCase("dd")) {
            Days days = Days.daysIn(interval);
            dateLength = days.getDays();
        } else if (datePart.equalsIgnoreCase("week") || datePart.equalsIgnoreCase("wk")) {
            Weeks weeks = Weeks.weeksIn(interval);
            dateLength = weeks.getWeeks();
        } else if (datePart.equalsIgnoreCase("month") || datePart.equalsIgnoreCase("mm")) {
            Months months = Months.monthsIn(interval);
            dateLength = months.getMonths();
        } else if (datePart.equalsIgnoreCase("year") || datePart.equalsIgnoreCase("yy")) {
            Years years = Years.yearsIn(interval);
            dateLength = years.getYears();
        } else if (datePart.equalsIgnoreCase("millisecond") || datePart.equalsIgnoreCase("ms")) {
            dateLength = (endTimestamp.getTime() - startTimestamp.getTime()); // millis
        } else if (datePart.equalsIgnoreCase("microsecond") || datePart.equalsIgnoreCase("mcs")) {
            dateLength = ((endTimestamp.getTime() - startTimestamp.getTime()) / 1000) // seconds
                    * 1000000L // micros
                    + (endTimestamp.getNanos() - startTimestamp.getNanos()) / 1000; // nanos/1000
        } else if (datePart.equalsIgnoreCase("nanosecond") || datePart.equalsIgnoreCase("ns")) {
            dateLength = ((endTimestamp.getTime() - startTimestamp.getTime()) / 1000) // seconds
                    * 1000000000L // nanos
                    + (endTimestamp.getNanos() - startTimestamp.getNanos()); // nanos
        } else {
            throw new IllegalArgumentException(datePart);
        }

        result = new Long(dateLength);

    } catch (Throwable t) {
        throw new CustomProcedureException(t);
    }
}

From source file:com.controller.webServices.JsonTopKGroupNextPlaces.java

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    response.setContentType("application/json");
    PrintWriter out = response.getWriter();

    System.out.println("======  Group Next Places   ======== ");

    JsonObject jsonResult = new JsonObject();
    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    JsonArray errorArray = new JsonArray();

    String date = request.getParameter("date");
    String token = request.getParameter("token");
    Timestamp ts = null;/*from w  ww  .jav a2 s .com*/
    Timestamp tsBefore = null;
    Timestamp tsAfter = null;
    HashMap<String, Integer> finalMap = null;
    ArrayList<String[]> personCount = null;

    //validation - date
    if (date == null) {
        errorArray.add(new JsonPrimitive("missing date"));
    } else {
        try {
            DateTime ts2 = new DateTime(date);
        } catch (IllegalArgumentException e) {
            errorArray.add(new JsonPrimitive("invalid date"));
        }
    }

    //validation - token
    if (token == null) {
        errorArray.add(new JsonPrimitive("missing token"));
    }
    //        } else if (token.equals("")) {
    //            errorArray.add(new JsonPrimitive("blank token"));
    //        } else {
    //            try {
    //                JWTUtility.verify(token, "ylleeg4t8");
    //            } catch (JWTException e) {
    //                errorArray.add(new JsonPrimitive("invalid token"));
    //            }
    //        }

    // Validation: Semantic Places
    String place = request.getParameter("origin");
    if (place == null) {
        errorArray.add(new JsonPrimitive("missing origin"));
    } else if (place.equals("")) {
        errorArray.add(new JsonPrimitive("blank origin"));
    }

    if (errorArray.size() > 0) {
        jsonResult.add("message", errorArray);
        out.println(gson.toJson(jsonResult));
        return;
    }

    ArrayList<Group> finalGroup = null;

    if (errorArray.size() == 0) {
        String date1 = date.substring(0, date.indexOf("T"));
        String time = date.substring(date.indexOf("T") + 1, date.length());

        try {

            LocalTime after = new LocalTime(Timestamp.valueOf(date1 + " " + time));
            int hour = Integer.parseInt(time.substring(0, time.indexOf(":")));
            int minute = Integer.parseInt(time.substring(time.indexOf(":") + 1, time.lastIndexOf(":")));
            int second = Integer.parseInt(time.substring(time.lastIndexOf(":") + 1, time.length()));
            if (hour >= 24 || minute >= 60 || second >= 60) {
                throw new Exception();
            }
            ts = Timestamp.valueOf(date1 + " " + time);
            tsBefore = new Timestamp(ts.getTime() - 900000);
            tsAfter = new Timestamp(ts.getTime() + 900000);

            ArrayList<Group> groupList = new ArrayList<Group>();
            finalMap = new HashMap<String, Integer>();
            personCount = new ArrayList<String[]>();

            AutoGroupDetectController agd = new AutoGroupDetectController();
            System.out.println("Group next places: " + tsBefore.toString() + " " + ts.toString());

            LocationLookupDAO llDAO = new LocationLookupDAO();
            HashMap<String, String> referMap = llDAO.retrieveAll();

            ArrayList<Group> firstGroup = agd.getFullGroups(tsBefore.toString(), ts.toString());
            //                if (firstGroup.size() == 0) {
            //                    request.setAttribute("results", personCount);
            //                    RequestDispatcher rd = request.getRequestDispatcher("group_next.jsp");
            //                    rd.forward(request, response);
            //                    return;
            //                }

            System.out.println("List size for group next places: " + firstGroup.size());
            ArrayList<Group> midGroup = new ArrayList<Group>();
            for (Group g : firstGroup) {
                String s = referMap.get(g.getLastPlace());
                System.out.println(s);
                if (s.equals(place)) {
                    midGroup.add(g);
                }
            }
            System.out.println("Mid list size for group next places: " + midGroup.size());
            finalGroup = agd.getMatchingGroups(ts.toString(), tsAfter.toString(), midGroup);
            System.out.println("Final list size for group next places: " + finalGroup.size());

            LocationLookupDAO lookupDAO = new LocationLookupDAO();
            HashMap<String, String> lookupMap = lookupDAO.retrieveAll();
            for (Group g : finalGroup) {
                ArrayList<Interval> groupInterList = new ArrayList<Interval>();
                HashMap<Interval, Integer> tempMap = new HashMap<Interval, Integer>();
                HashMap<String, ArrayList<Interval>> overlapMap = g.getLocOverlapMap();
                for (String s : overlapMap.keySet()) {
                    ArrayList<Interval> interList = overlapMap.get(s);
                    groupInterList.addAll(interList);
                    for (Interval in : interList) {
                        Integer i = Integer.parseInt(s);
                        tempMap.put(in, i);
                    }
                }
                Collections.sort(groupInterList, new IntervalEndComparator(groupInterList));
                for (Interval in : groupInterList) {
                    if (Seconds.secondsIn(in).getSeconds() >= 300) {
                        Integer i = tempMap.get(in);
                        String semPlace = lookupMap.get(String.valueOf(i));
                        Integer groupCount = finalMap.get(semPlace);
                        if (groupCount != null) {
                            finalMap.put(semPlace, (groupCount + 1));
                        } else {
                            finalMap.put(semPlace, 1);
                        }
                        break;
                    }
                }
            }

        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        for (Entry<String, Integer> entry : finalMap.entrySet()) {

            String[] countArray = new String[] { entry.getKey(), entry.getValue().toString() };
            personCount.add(countArray);
        }

        Collections.sort(personCount, new ValueComparator(personCount));

        jsonResult.addProperty("status", "success");
        jsonResult.addProperty("total-groups", finalGroup.size());
        jsonResult.addProperty("total-next-place-groups", personCount.size());
        JsonArray results = new JsonArray();
        for (int i = 0; i < personCount.size(); i++) {
            String[] arr = personCount.get(i);
            JsonObject nextPlaceObject = new JsonObject();
            nextPlaceObject.addProperty("rank", i + 1);
            nextPlaceObject.addProperty("semantic-place", arr[0]);
            nextPlaceObject.addProperty("num-groups", Integer.parseInt(arr[1]));
            results.add(nextPlaceObject);
        }
        jsonResult.add("results", results);

        out.println(gson.toJson(jsonResult));

        //            request.setAttribute("results", personCount);
        //            RequestDispatcher rd = request.getRequestDispatcher("group_next.jsp");
        //            rd.forward(request, response);
    }
}

From source file:com.sloca.controller.GroupNextPlacesServlet.java

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    response.setContentType("application/json");
    PrintWriter out = response.getWriter();

    Timestamp ts = null;//from  w w w. j a va  2  s.  c  o  m
    Timestamp tsBefore = null;
    Timestamp tsAfter = null;
    HashMap<String, Integer> finalMap = null;
    ArrayList<String[]> personCount = null;
    AutoGroupDetectController agd = null;

    try {
        String date = request.getParameter("date");
        String time = request.getParameter("time");
        String k = request.getParameter("kvalue");
        String place = request.getParameter("sem");

        request.setAttribute("date", date);
        request.setAttribute("time", time);
        request.setAttribute("kvalue", k);
        request.setAttribute("semanticplace", place);

        String year = date.substring(date.lastIndexOf("-") + 1);
        String month = date.substring(date.indexOf("-") + 1, date.lastIndexOf("-"));
        String day = date.substring(0, date.indexOf("-"));
        String date1 = year + "-" + month + "-" + day;

        LocationLookupDAO llDAO = new LocationLookupDAO();
        HashMap<String, String> referMap = llDAO.retrieveAll();

        int hour = Integer.parseInt(time.substring(0, time.indexOf(":")));
        int minute = Integer.parseInt(time.substring(time.indexOf(":") + 1, time.lastIndexOf(":")));
        int second = Integer.parseInt(time.substring(time.lastIndexOf(":") + 1, time.length()));
        if (hour >= 24 || minute >= 60 || second >= 60) {
            throw new Exception();
        }

        ts = Timestamp.valueOf(date1 + " " + time);
        tsBefore = new Timestamp(ts.getTime() - 900000);
        tsAfter = new Timestamp(ts.getTime() + 900000);

        finalMap = new HashMap<String, Integer>();
        personCount = new ArrayList<String[]>();
        agd = new AutoGroupDetectController();

        ArrayList<Group> firstGroup = agd.getFullGroups(tsBefore.toString(), ts.toString());
        if (firstGroup.size() == 0) {
            request.setAttribute("results", personCount);
            RequestDispatcher rd = request.getRequestDispatcher("group_next.jsp");
            rd.forward(request, response);
            return;
        }

        System.out.println("List size for group next places: " + firstGroup.size());
        ArrayList<Group> midGroup = new ArrayList<Group>();
        for (Group g : firstGroup) {
            String s = referMap.get(g.getLastPlace());
            System.out.println(s);
            if (s.equals(place)) {
                midGroup.add(g);
            }
        }
        System.out.println("Mid list size for group next places: " + midGroup.size());
        ArrayList<Group> finalGroup = agd.getMatchingGroups(ts.toString(), tsAfter.toString(), midGroup);
        System.out.println("Final list size for group next places: " + finalGroup.size());

        LocationLookupDAO lookupDAO = new LocationLookupDAO();
        HashMap<String, String> lookupMap = lookupDAO.retrieveAll();
        for (Group g : finalGroup) {
            ArrayList<Interval> groupInterList = new ArrayList<Interval>();
            HashMap<Interval, Integer> tempMap = new HashMap<Interval, Integer>();
            HashMap<String, ArrayList<Interval>> overlapMap = g.getLocOverlapMap();
            for (String s : overlapMap.keySet()) {
                ArrayList<Interval> interList = overlapMap.get(s);
                groupInterList.addAll(interList);
                for (Interval in : interList) {
                    Integer i = Integer.parseInt(s);
                    tempMap.put(in, i);
                }
            }
            Collections.sort(groupInterList, new IntervalEndComparator(groupInterList));
            for (Interval in : groupInterList) {
                if (Seconds.secondsIn(in).getSeconds() >= 300) {
                    Integer i = tempMap.get(in);
                    String semPlace = lookupMap.get(String.valueOf(i));
                    Integer groupCount = finalMap.get(semPlace);
                    if (groupCount != null) {
                        finalMap.put(semPlace, (groupCount + 1));
                    } else {
                        finalMap.put(semPlace, 1);
                    }
                    break;
                }
            }
        }

    } catch (IllegalArgumentException e) {
        request.setAttribute("error", "<b>Error!</b><br>Please enter a valid datetime format.");
        RequestDispatcher rd = request.getRequestDispatcher("group_next.jsp");
        rd.forward(request, response);
        return;
    } catch (Exception e) {
        request.setAttribute("error", "<b>Oops!</b><br>Something went wrong!");
        RequestDispatcher rd = request.getRequestDispatcher("group_next.jsp");
        rd.forward(request, response);
        return;
    }

    for (Entry<String, Integer> entry : finalMap.entrySet()) {
        String[] countArray = new String[] { entry.getKey(), entry.getValue().toString() };
        personCount.add(countArray);
    }

    Collections.sort(personCount, new ValueComparator(personCount));
    request.setAttribute("results", personCount);
    RequestDispatcher rd = request.getRequestDispatcher("group_next.jsp");
    rd.forward(request, response);
}

From source file:com.sloca.controller.NextPlaceServlet.java

/**
 * Processes requests for both HTTP/*from  w ww. j  a  v  a2 s .  c o  m*/
 * <code>GET</code> and
 * <code>POST</code> methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    try {
        String semPlace = request.getParameter("sem");
        String date_s = request.getParameter("date");
        String time_s = request.getParameter("time");
        String k = request.getParameter("kvalue");

        request.setAttribute("semanticplace", semPlace);
        request.setAttribute("date", date_s);
        request.setAttribute("time", time_s);
        request.setAttribute("kvalue", k);

        String year = date_s.substring(date_s.lastIndexOf("-") + 1);
        String month = date_s.substring(date_s.indexOf("-") + 1, date_s.lastIndexOf("-"));
        String day = date_s.substring(0, date_s.indexOf("-"));
        date_s = year + "-" + month + "-" + day;

        Timestamp ts = Timestamp.valueOf(date_s + " " + time_s);
        Timestamp tsBefore = getTimeBefore(ts);
        Timestamp tsAfter = getTimeAfter(ts);

        int totalUsers = 0;
        int nextPlaceUsers = 0;

        conn = ConnectionFactory.getConnection();

        String sql = "select temp.mac as mac2 from location t inner join "
                + "(select mac_address as mac, max(time_stamp) as time from location t "
                + "where time_stamp between '" + tsBefore + "' and '" + ts + "' "
                + "group by mac_address) as temp " + "on t.mac_address = temp.mac and t.time_stamp = temp.time "
                + "inner join location_lookup l on l.location_id = t.location_id where semanticplace = '"
                + semPlace + "'";
        pstmt = conn.prepareStatement(sql);
        rs = pstmt.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getString(1));
            totalUsers++;
        }

        pstmt = conn.prepareStatement(
                "select l2.mac_address as mac, u2.semanticplace, l2.time_stamp from location l2 "
                        + "inner join ((" + sql + ") as temp2), location_lookup u2 "
                        + "where l2.mac_address = temp2.mac2 and u2.location_id = l2.location_id and l2.time_stamp between '"
                        + ts + "' and '" + tsAfter + "' " + "group by l2.mac_address, l2.time_stamp "
                        + "order by l2.mac_address, l2.time_stamp DESC");
        rs = pstmt.executeQuery();

        String mac = "";
        String semanticPlace = "";
        DateTime before = null;
        DateTime after = null;
        DateTime temp = null;
        DateTime last = new DateTime(tsAfter.getTime());
        boolean alrCount = false;
        HashMap<String, Integer> placeTime = new HashMap<String, Integer>();

        while (rs.next()) {
            if (mac.equals("") && semanticPlace.equals("")) {
                System.out.println("firstTime");
                mac = rs.getString(1);
                semanticPlace = rs.getString(2);
                after = last;
                temp = new DateTime(rs.getTimestamp(3).getTime());
            } else if (!mac.equals(rs.getString(1))) {
                System.out.println("changeName");
                before = temp;
                Interval in = new Interval(before, after);
                if (Seconds.secondsIn(in).getSeconds() >= 300 && !alrCount) {
                    Integer timeCount = placeTime.get(semanticPlace);
                    if (timeCount != null) {
                        placeTime.put(semanticPlace, (timeCount + 1));
                    } else {
                        placeTime.put(semanticPlace, 1);
                    }
                    nextPlaceUsers++;
                }
                alrCount = false;
                mac = rs.getString(1);
                semanticPlace = rs.getString(2);
                after = last;
                before = null;
                temp = new DateTime(rs.getTimestamp(3).getTime());
            } else if (!semanticPlace.equals(rs.getString(2))) {
                System.out.println("same user changePlace");
                before = temp;
                Interval in = new Interval(before, after);
                if (Seconds.secondsIn(in).getSeconds() >= 300 && !alrCount) {
                    Integer timeCount = placeTime.get(semanticPlace);
                    if (timeCount != null) {
                        placeTime.put(semanticPlace, (timeCount + 1));
                    } else {
                        placeTime.put(semanticPlace, 1);
                    }
                    nextPlaceUsers++;
                    alrCount = true;
                }
                semanticPlace = rs.getString(2);
                after = before;
                before = null;
                temp = new DateTime(rs.getTimestamp(3).getTime());
            } else {
                System.out.println("nothing changes!");
                temp = new DateTime(rs.getTimestamp(3).getTime());
                continue;
            }
        }
        before = temp;
        Interval in = new Interval(before, after);
        if (Seconds.secondsIn(in).getSeconds() >= 300 && !alrCount) {
            Integer timeCount = placeTime.get(semanticPlace);
            if (timeCount != null) {
                placeTime.put(semanticPlace, (timeCount + 1));
            } else {
                placeTime.put(semanticPlace, 1);
            }
            nextPlaceUsers++;
        }
        System.out.println(placeTime.size());

        SortedSet<Map.Entry<String, Integer>> newSet = entriesSortedByValues(placeTime);

        request.setAttribute("totalUsers", totalUsers);
        request.setAttribute("nextPlaceUsers", nextPlaceUsers);
        request.setAttribute("set", newSet);
        RequestDispatcher rd = request.getRequestDispatcher("top_k_next_places.jsp");
        rd.forward(request, response);
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        request.setAttribute("error", "<b>Error!</b><br>Please enter a valid datetime format.");
        RequestDispatcher rd = request.getRequestDispatcher("top_k_next_places.jsp");
        rd.forward(request, response);
    } catch (Exception e) {
        request.setAttribute("error", "<b>Oops!</b><br> Something went wrong! Please check your input fields!");
        RequestDispatcher rd = request.getRequestDispatcher("top_k_next_places.jsp");
        rd.forward(request, response);
    } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (pstmt != null) {
                pstmt.close();
            }
            if (conn != null) {
                conn.close();
            }
            if (out != null) {
                out.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(NextPlaceServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

From source file:com.sloca.entity.Group.java

/**
 * Compare the overlap time/*from w  w w .jav  a 2  s .c om*/
 * @param other the group to compare
 * @return -1 if not overlap, otherwise return fullCount
 */
public int compareOverlap(Group other) {
    int fullCount = 0;
    ArrayList<Interval> intervalList = new ArrayList<Interval>();
    for (String s : getLocOverlapMap().keySet()) {
        ArrayList<Interval> firstList = getLocOverlapMap().get(s);
        ArrayList<Interval> secondList = other.getLocOverlapMap().get(s);
        for (Interval first : firstList) {
            for (Interval second : secondList) {
                Interval overlap = first.overlap(second);
                if (overlap != null) {
                    Seconds seconds = Seconds.secondsIn(overlap);
                    int secs = seconds.getSeconds();
                    fullCount = fullCount + secs;
                    intervalList.add(overlap);
                }
            }
        }
    }
    if (fullCount >= 720) {
        return fullCount;
    } else {
        return -1;
    }
}

From source file:org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo.java

License:Open Source License

/**
 * Static factory method.//from w w  w.  j a v a 2 s  . co  m
 *
 * Determine the period size, number of periods, whole period bounds, and
 * formatters to use to visualize the given timerange.
 *
 * @param timeRange
 *
 * @return
 */
public static RangeDivisionInfo getRangeDivisionInfo(Interval timeRange) {
    //Check from largest to smallest unit

    //TODO: make this more generic... reduce code duplication -jm
    DateTimeFieldType timeUnit;
    final DateTime startWithZone = timeRange.getStart().withZone(TimeLineController.getJodaTimeZone());
    final DateTime endWithZone = timeRange.getEnd().withZone(TimeLineController.getJodaTimeZone());

    if (Years.yearsIn(timeRange).isGreaterThan(Years.THREE)) {
        timeUnit = DateTimeFieldType.year();
        long lower = startWithZone.property(timeUnit).roundFloorCopy().getMillis();
        long upper = endWithZone.property(timeUnit).roundCeilingCopy().getMillis();
        return new RangeDivisionInfo(timeRange, Years.yearsIn(timeRange).get(timeUnit.getDurationType()) + 1,
                TimeUnits.YEARS, ISODateTimeFormat.year(), lower, upper);
    } else if (Months.monthsIn(timeRange).isGreaterThan(Months.THREE)) {
        timeUnit = DateTimeFieldType.monthOfYear();
        long lower = startWithZone.property(timeUnit).roundFloorCopy().getMillis();
        long upper = endWithZone.property(timeUnit).roundCeilingCopy().getMillis();
        return new RangeDivisionInfo(timeRange, Months.monthsIn(timeRange).getMonths() + 1, TimeUnits.MONTHS,
                DateTimeFormat.forPattern("YYYY'-'MMMM"), lower, upper); // NON-NLS
    } else if (Days.daysIn(timeRange).isGreaterThan(Days.THREE)) {
        timeUnit = DateTimeFieldType.dayOfMonth();
        long lower = startWithZone.property(timeUnit).roundFloorCopy().getMillis();
        long upper = endWithZone.property(timeUnit).roundCeilingCopy().getMillis();
        return new RangeDivisionInfo(timeRange, Days.daysIn(timeRange).getDays() + 1, TimeUnits.DAYS,
                DateTimeFormat.forPattern("YYYY'-'MMMM'-'dd"), lower, upper); // NON-NLS
    } else if (Hours.hoursIn(timeRange).isGreaterThan(Hours.THREE)) {
        timeUnit = DateTimeFieldType.hourOfDay();
        long lower = startWithZone.property(timeUnit).roundFloorCopy().getMillis();
        long upper = endWithZone.property(timeUnit).roundCeilingCopy().getMillis();
        return new RangeDivisionInfo(timeRange, Hours.hoursIn(timeRange).getHours() + 1, TimeUnits.HOURS,
                DateTimeFormat.forPattern("YYYY'-'MMMM'-'dd HH"), lower, upper); // NON-NLS
    } else if (Minutes.minutesIn(timeRange).isGreaterThan(Minutes.THREE)) {
        timeUnit = DateTimeFieldType.minuteOfHour();
        long lower = startWithZone.property(timeUnit).roundFloorCopy().getMillis();
        long upper = endWithZone.property(timeUnit).roundCeilingCopy().getMillis();
        return new RangeDivisionInfo(timeRange, Minutes.minutesIn(timeRange).getMinutes() + 1,
                TimeUnits.MINUTES, DateTimeFormat.forPattern("YYYY'-'MMMM'-'dd HH':'mm"), lower, upper); // NON-NLS
    } else {
        timeUnit = DateTimeFieldType.secondOfMinute();
        long lower = startWithZone.property(timeUnit).roundFloorCopy().getMillis();
        long upper = endWithZone.property(timeUnit).roundCeilingCopy().getMillis();
        return new RangeDivisionInfo(timeRange, Seconds.secondsIn(timeRange).getSeconds() + 1,
                TimeUnits.SECONDS, DateTimeFormat.forPattern("YYYY'-'MMMM'-'dd HH':'mm':'ss"), lower, upper); // NON-NLS
    }
}