Ejemplo n.º 1
0
    public String toString(Context context, boolean showNever) {
      StringBuilder ret = new StringBuilder();

      // no days
      if (mDays == 0) {
        return showNever ? context.getText(R.string.never).toString() : "";
      }

      // every day
      if (mDays == 0x7f) {
        return context.getText(R.string.every_day).toString();
      }

      // count selected days
      int dayCount = 0, days = mDays;
      while (days > 0) {
        if ((days & 1) == 1) dayCount++;
        days >>= 1;
      }

      // short or long form?
      DateFormatSymbols dfs = new DateFormatSymbols();
      String[] dayList = (dayCount > 1) ? dfs.getShortWeekdays() : dfs.getWeekdays();

      // selected days
      for (int i = 0; i < 7; i++) {
        if ((mDays & (1 << i)) != 0) {
          ret.append(dayList[DAY_MAP[i]]);
          dayCount -= 1;
          if (dayCount > 0) ret.append(context.getText(R.string.day_concat));
        }
      }
      return ret.toString();
    }
  @Test
  public void testItAbbreviatesDayNames() {
    // simulate Feb month
    when(calendar.get(Calendar.DAY_OF_WEEK)).thenReturn(1);
    when(calendar.get(Calendar.MONTH)).thenReturn(1);
    when(calendar.getActualMaximum(Calendar.DAY_OF_MONTH)).thenReturn(28);

    underTest.setGrowProgress(
        1000); // set grow progress so that it simulates the calendar being open
    underTest.setLocale(Locale.FRANCE);
    reset(canvas); // reset because invalidate is called
    underTest.setUseWeekDayAbbreviation(true);
    reset(canvas); // reset because invalidate is called
    underTest.drawMonth(canvas, calendar, 0);

    DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(Locale.FRANCE);
    String[] dayNames = dateFormatSymbols.getShortWeekdays();

    InOrder inOrder = inOrder(canvas);
    inOrder.verify(canvas).drawText(eq(dayNames[2]), anyInt(), anyInt(), eq(paint));
    inOrder.verify(canvas).drawText(eq(dayNames[3]), anyInt(), anyInt(), eq(paint));
    inOrder.verify(canvas).drawText(eq(dayNames[4]), anyInt(), anyInt(), eq(paint));
    inOrder.verify(canvas).drawText(eq(dayNames[5]), anyInt(), anyInt(), eq(paint));
    inOrder.verify(canvas).drawText(eq(dayNames[6]), anyInt(), anyInt(), eq(paint));
    inOrder.verify(canvas).drawText(eq(dayNames[7]), anyInt(), anyInt(), eq(paint));
    inOrder.verify(canvas).drawText(eq(dayNames[1]), anyInt(), anyInt(), eq(paint));
  }
Ejemplo n.º 3
0
 private List<LocalizedLabel> getNameOfWeekdays(AuraLocale locale) throws QuickFixException {
   DateFormatSymbols weekdaySymbols = DateFormatSymbols.getInstance(locale.getLanguageLocale());
   String[] weekdays = weekdaySymbols.getWeekdays();
   String[] shortWeekdays = weekdaySymbols.getShortWeekdays();
   ArrayList<LocalizedLabel> weekdayList = new ArrayList<>(7);
   for (int i = 1; i < weekdays.length; i++) {
     weekdayList.add(
         new LocalizedLabel(
             weekdays[i], shortWeekdays[i].toUpperCase(locale.getLanguageLocale())));
   }
   return weekdayList;
 }
Ejemplo n.º 4
0
 private static String[] getDisplayNameArray(int field, boolean isLong, Locale locale) {
   DateFormatSymbols dfs = new DateFormatSymbols(locale);
   switch (field) {
     case Calendar.AM_PM:
       return dfs.getAmPmStrings();
     case Calendar.DAY_OF_WEEK:
       return isLong ? dfs.getWeekdays() : dfs.getShortWeekdays();
     case Calendar.ERA:
       return dfs.getEras();
     case Calendar.MONTH:
       return isLong ? dfs.getMonths() : dfs.getShortMonths();
   }
   return null;
 }
Ejemplo n.º 5
0
  /* look for the rate in te account file for the time in the login string */
  public RateEntry getRate(String login) {
    int logday = 0, rateday = 0;
    //    System.out.println("getRate: login='******'");
    String day, time, rate = null;
    StringTokenizer st = new StringTokenizer(login);
    // frits     pts/21       flash            Fri Mar 18 13:46 - 14:30 (6+00:44)
    //                                        ^              ^
    day = st.nextToken();
    time = st.nextToken();
    time = st.nextToken();
    time = st.nextToken().substring(0, 5);
    // System.out.println(login+" "+day+" "+time);
    // Get the international names of the days and which day is (1,2,3...
    // Then find day of each rate entry, (1,2,3,4
    // Now we can compare, independent of the language used for the days
    // Finally use the time to compare as well
    DateFormatSymbols dfs = new DateFormatSymbols();
    String[] days = dfs.getShortWeekdays();
    for (int j = 1; j < days.length; j++) {
      if (day.compareTo(days[j]) == 0) {
        logday = j;
        break;
      }
    }
    // logday -> the day given in the gorecords.xml file (the log)

    int n = rates.size();
    // the last rate applies if before the first entry
    // Init to last rate given in the account
    RateEntry tmpRE, saveRE = rates(n - 1);
    //    System.out.println("n="+n);
    for (int i = 0; i < n; i++) {
      tmpRE = rates(i);
      for (int j = 1; j < days.length; j++) {
        if (tmpRE.day.compareTo(days[j]) == 0) {
          rateday = j;
          break;
        }
      }
      //    System.out.println("j="+jday+" k="+kday+" "+tmpRE.time+" "+tmpRE.loginhr);
      // the last rate applies if before the first entry
      if (logday > rateday) {
        saveRE = tmpRE;
      }
      if ((logday == rateday) && (time.compareTo(tmpRE.time) >= 0)) {
        saveRE = tmpRE;
      }
    }
    return saveRE;
  }
Ejemplo n.º 6
0
  private void drawMonthDayLabels(Canvas canvas) {
    int y = MONTH_HEADER_SIZE - (MONTH_DAY_LABEL_TEXT_SIZE / 2);
    int dayWidthHalf = (mWidth - mPadding * 2) / (mNumDays * 2);

    for (int i = 0; i < mNumDays; i++) {
      int calendarDay = (i + mWeekStart) % mNumDays;
      int x = (2 * i + 1) * dayWidthHalf + mPadding;
      mDayLabelCalendar.set(Calendar.DAY_OF_WEEK, calendarDay);
      canvas.drawText(
          mDateFormatSymbols.getShortWeekdays()[mDayLabelCalendar.get(Calendar.DAY_OF_WEEK)]
              .toUpperCase(Locale.getDefault()),
          x,
          y,
          mMonthDayLabelPaint);
    }
  }
Ejemplo n.º 7
0
  public static void main(String[] args) throws java.lang.Exception {
    Locale[] locales = Locale.getAvailableLocales();

    // sorting locales
    sortArray(Collator.getInstance(Locale.ENGLISH), locales);

    // comment first
    System.out.println("/*");
    int i = 0;
    for (Locale l : locales) {
      i++;
      if (l.getDisplayName().contains("(")) continue;
      if (blacklisted(i)) continue;
      System.out.print(" * " + i + " " + l.getDisplayName());
      System.out.println();
    }
    System.out.println(" */");

    // body
    i = 0;
    for (Locale l : locales) {
      i++;
      if (blacklisted(i)) continue;
      if (l.getDisplayName().contains("(")) continue;
      DateFormatSymbols symbols = new DateFormatSymbols(l);
      String[] dayNames = symbols.getShortWeekdays();

      // precompiler condition
      System.out.println("#if LANG == " + i);
      System.out.println("// " + l.getDisplayName());

      // day array body
      System.out.println("static const char* const DAYS[] = {");
      for (String s : dayNames) {
        if (s.length() == 0) continue;
        String norm = Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
        System.out.print("\"" + norm.toUpperCase() + "\",");
        System.out.println(" /* " + s + " */");
      }
      System.out.println("};");

      System.out.println("#endif ");
      System.out.println();
    }
  }
Ejemplo n.º 8
0
  /**
   * Converts the supplied string to a day of the week.
   *
   * @param s a string representing the day of the week.
   * @return <code>-1</code> if the string is not convertable, the day of the week otherwise.
   */
  public static int stringToWeekdayCode(String s) {

    final String[] shortWeekdayNames = DATE_FORMAT_SYMBOLS.getShortWeekdays();
    final String[] weekDayNames = DATE_FORMAT_SYMBOLS.getWeekdays();

    int result = -1;
    s = s.trim();
    for (int i = 0; i < weekDayNames.length; i++) {
      if (s.equals(shortWeekdayNames[i])) {
        result = i;
        break;
      }
      if (s.equals(weekDayNames[i])) {
        result = i;
        break;
      }
    }
    return result;
  }
Ejemplo n.º 9
0
    public AlarmItemAdapter(
        Context context,
        int[] expandedIds,
        int[] repeatCheckedIds,
        int[] selectedAlarms,
        Bundle previousDaysOfWeekMap,
        ListView list) {
      super(context, null, 0);
      mContext = context;
      mFactory = LayoutInflater.from(context);
      mList = list;

      DateFormatSymbols dfs = new DateFormatSymbols();
      mShortWeekDayStrings = dfs.getShortWeekdays();
      mLongWeekDayStrings = dfs.getWeekdays();

      Resources res = mContext.getResources();
      mColorLit = res.getColor(R.color.clock_white);
      mColorDim = res.getColor(R.color.clock_gray);
      mBackgroundColorSelected = res.getColor(R.color.alarm_selected_color);
      mBackgroundColor = res.getColor(R.color.alarm_whiteish);

      mRobotoBold = Typeface.create("sans-serif-condensed", Typeface.BOLD);
      mRobotoNormal = Typeface.create("sans-serif-condensed", Typeface.NORMAL);

      if (expandedIds != null) {
        buildHashSetFromArray(expandedIds, mExpanded);
      }
      if (repeatCheckedIds != null) {
        buildHashSetFromArray(repeatCheckedIds, mRepeatChecked);
      }
      if (previousDaysOfWeekMap != null) {
        mPreviousDaysOfWeekMap = previousDaysOfWeekMap;
      }
      if (selectedAlarms != null) {
        buildHashSetFromArray(selectedAlarms, mSelectedAlarms);
      }

      mHasVibrator = ((Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE)).hasVibrator();
    }
Ejemplo n.º 10
0
  /** Updates the week names, when the locale changed. */
  private void updateWeekNames() {
    DateFormatSymbols dateFormatSymbols =
        new DateFormatSymbols(calendarView.localeProperty().get());
    String[] weekDays = dateFormatSymbols.getShortWeekdays();

    // Start with 1 instead of 0, since the first element in the array is empty.
    for (int i = 1; i < weekDays.length; i++) {
      // Get the first character only.
      String shortWeekDay = weekDays[i].substring(0, 2);

      // Shift the index according to the first day of week.
      int j = i - calendarView.getCalendar().getFirstDayOfWeek();
      if (j < 0) {
        j += weekDays.length - 1;
      }

      Label label = (Label) getChildren().get(j + (calendarView.getShowWeeks() ? 1 : 0));

      label.setText(shortWeekDay);
    }
    title.set(getDateFormat("MMMM yyyy").format(calendarView.getCalendar().getTime()));
  }
Ejemplo n.º 11
0
  private String toString(Context context, boolean showNever, boolean forAccessibility) {
    StringBuilder ret = new StringBuilder();

    // no days
    if (mBitSet == NO_DAYS_SET) {
      return showNever ? context.getText(R.string.never).toString() : "";
    }

    // every day
    if (mBitSet == ALL_DAYS_SET) {
      return context.getText(R.string.every_day).toString();
    }

    // count selected days
    int dayCount = 0;
    int bitSet = mBitSet;
    while (bitSet > 0) {
      if ((bitSet & 1) == 1) dayCount++;
      bitSet >>= 1;
    }

    // short or long form?
    DateFormatSymbols dfs = new DateFormatSymbols();
    String[] dayList =
        (forAccessibility || dayCount <= 1) ? dfs.getWeekdays() : dfs.getShortWeekdays();

    // selected days
    for (int bitIndex = 0; bitIndex < DAYS_IN_A_WEEK; bitIndex++) {
      if ((mBitSet & (1 << bitIndex)) != 0) {
        ret.append(dayList[convertBitIndexToDay(bitIndex)]);
        dayCount -= 1;
        if (dayCount > 0) ret.append(context.getText(R.string.day_concat));
      }
    }
    return ret.toString();
  }
  /**
   * Faces render output method .
   *
   * <p>Method Generator: org.sakaiproject.tool.assessment.devtoolsRenderMaker
   *
   * @param context <code>FacesContext</code> for the current request
   * @param component <code>UIComponent</code> being rendered
   * @throws IOException if an input/output error occurs
   */
  public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
    // get the calendar for the Locale, so this will be localized
    DateFormatSymbols dfs = new DateFormatSymbols();
    String[] days = dfs.getShortWeekdays();
    String[] months = dfs.getMonths();
    String jan = months[Calendar.JANUARY];
    String feb = months[Calendar.FEBRUARY];
    String mar = months[Calendar.MARCH];
    String apr = months[Calendar.APRIL];
    String may = months[Calendar.MAY];
    String jun = months[Calendar.JUNE];
    String jul = months[Calendar.JULY];
    String aug = months[Calendar.AUGUST];
    String sep = months[Calendar.SEPTEMBER];
    String oct = months[Calendar.OCTOBER];
    String nov = months[Calendar.NOVEMBER];
    String dec = months[Calendar.DECEMBER];
    String mon = days[Calendar.MONDAY];
    String tue = days[Calendar.TUESDAY];
    String wed = days[Calendar.WEDNESDAY];
    String thu = days[Calendar.THURSDAY];
    String fri = days[Calendar.FRIDAY];
    String sat = days[Calendar.SATURDAY];
    String sun = days[Calendar.SUNDAY];

    String contextPath = context.getExternalContext().getRequestContextPath();

    ResponseWriter writer = context.getResponseWriter();

    writer.write("<!--\n");
    writer.write("Title: Tigra Calendar\n");
    writer.write("URL: http://www.softcomplex.com/products/tigra_calendar/\n");
    writer.write("Version: 3.2\n");
    writer.write("Date: 10/14/2002 (mm/dd/yyyy)\n");
    writer.write(
        "Feedback: feedback@softcCalendar calendar = new GregorianCalendar(pdt);omplex.com (specify product title in the subject)\n");
    writer.write("Note: Permission given to use this script in ANY kind of applications if\n");
    writer.write("   header lines are left unchanged.\n");
    writer.write("Note: Script consists of two files: calendar?.js and calendar.html\n");
    writer.write("About us: Our company provides offshore IT consulting services.\n");
    writer.write("    Contact us at [email protected] if you have any programming task you\n");
    writer.write("    want to be handled by professionals. Our typical hourly rate is $20.\n");
    writer.write("-->\n");

    writer.write("<html>\n");
    //      writer.write("<html xmlns=\"http://www.w3.org/1999/xhtml\">\n");
    //      writer.write(
    //        "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN>");
    //      writer.write("<html>\n");
    writer.write("<head>\n");
    writer.write("<title>Select Date, Please.</title>\n");
    writer.write("<style>\n");
    writer.write("	td {font-family: Tahoma, Verdana, sans-serif; font-size: 12px;}\n");
    writer.write("</style>\n");
    writer.write("<script language=\"JavaScript\">\n");
    writer.write("//<![CDATA[\n");
    writer.write("// months as they appear in the calendar's title\n");
    writer.write("// (These are dynamically built by locale DateFormatSymbols!)\n");
    writer.write(
        "var ARR_MONTHS = "
            + "[\""
            + jan
            + "\", \""
            + feb
            + "\", "
            + "\""
            + mar
            + "\", \""
            + apr
            + "\", "
            + "\""
            + may
            + "\", \""
            + jun
            + "\",\n");
    writer.write(
        "		\"" + jul + "\", \"" + aug + "\", " + "\"" + sep + "\", \"" + oct + "\", \"" + nov
            + "\", \"" + dec + "\"];\n");
    writer.write("// week day titles as they appear on the calendar\n");
    writer.write(
        "var ARR_WEEKDAYS = "
            + "[\""
            + sun
            + "\", \""
            + mon
            + "\", \""
            + tue
            + "\", "
            + "\""
            + wed
            + "\", \""
            + thu
            + "\", \""
            + fri
            + "\", "
            + "\"Sa\"];\n");
    writer.write("// day week starts from (normally 0-Su or 1-Mo)\n");
    writer.write("var NUM_WEEKSTART = 1;\n");
    writer.write(
        "// path to the directory where calendar images are stored. trailing slash req.\n");
    writer.write("var STR_ICONPATH = '" + contextPath + "/images/calendar/';\n");
    writer.write("\n");
    writer.write("var re_url = new RegExp('datetime=(\\-?\\d+)');\n");
    writer.write("var dt_current = (re_url.exec(String(window.location))\n");
    writer.write("	? new Date(new Number(RegExp.$1)) : new Date());\n");
    writer.write("var re_id = new RegExp('id=(\\d+)');\n");
    writer.write("var num_id = (re_id.exec(String(window.location))\n");
    writer.write("	? new Number(RegExp.$1) : 0);\n");
    writer.write("var obj_caller = (window.opener ? window.opener.calendars[num_id] : null);\n");
    writer.write("var root_url = new RegExp('root=(\\S+)');\n");
    writer.write(
        "var root = (root_url.exec(String(window.location)) ? new String(RegExp.$1) : \"\")\n");
    writer.write("if (obj_caller && obj_caller.year_scroll) {\n");
    writer.write("	// get same date in the previous year\n");
    writer.write("	var dt_prev_year = new Date(dt_current);\n");
    writer.write("	dt_prev_year.setFullYear(dt_prev_year.getFullYear() - 1);\n");
    writer.write("	if (dt_prev_year.getDate() != dt_current.getDate())\n");
    writer.write("		dt_prev_year.setDate(0);\n");
    writer.write("\n");
    writer.write("	// get same date in the next year\n");
    writer.write("	var dt_next_year = new Date(dt_current);\n");
    writer.write("	dt_next_year.setFullYear(dt_next_year.getFullYear() + 1);\n");
    writer.write("	if (dt_next_year.getDate() != dt_current.getDate())\n");
    writer.write("		dt_next_year.setDate(0);\n");
    writer.write("}\n");
    writer.write("\n");
    writer.write("// get same date in the previous month\n");
    writer.write("var dt_prev_month = new Date(dt_current);\n");
    writer.write("dt_prev_month.setMonth(dt_prev_month.getMonth() - 1);\n");
    writer.write("if (dt_prev_month.getDate() != dt_current.getDate())\n");
    writer.write("	dt_prev_month.setDate(0);\n");
    writer.write("\n");
    writer.write("// get same date in the next month\n");
    writer.write("var dt_next_month = new Date(dt_current);\n");
    writer.write("dt_next_month.setMonth(dt_next_month.getMonth() + 1);\n");
    writer.write("if (dt_next_month.getDate() != dt_current.getDate())\n");
    writer.write("	dt_next_month.setDate(0);\n");
    writer.write("\n");
    writer.write("// get first day to display in the grid for current month\n");
    writer.write("var dt_firstday = new Date(dt_current);\n");
    writer.write("dt_firstday.setDate(1);\n");
    writer.write("dt_firstday.setDate(1 - (7 + dt_firstday.getDay() - NUM_WEEKSTART) % 7);\n");
    writer.write("\n");
    writer.write("// function passing selected date to calling window\n");
    writer.write("function set_datetime(n_datetime, b_close) {\n");
    writer.write("	if (!obj_caller) return;\n");
    writer.write("\n");
    writer.write("	var dt_datetime = obj_caller.prs_time(\n");
    writer.write("		(document.cal ? document.cal.time.value : ''),\n");
    writer.write("		new Date(n_datetime)\n");
    writer.write("	);\n");
    writer.write("\n");
    writer.write("	if (!dt_datetime) return;\n");
    writer.write("	if (b_close) {\n");
    writer.write("		window.close();\n");
    writer.write("		obj_caller.target.value = (document.cal\n");
    writer.write("			? obj_caller.gen_tsmp(dt_datetime)\n");
    writer.write("			: obj_caller.gen_date(dt_datetime)\n");
    writer.write("		);\n");
    writer.write("	}\n");
    writer.write("	else obj_caller.popup(dt_datetime.valueOf());\n");
    writer.write("}\n");
    writer.write("\n");
    writer.write("function set_datetime_update(n_datetime, with_root) {\n");
    writer.write("  if (!obj_caller) return;\n");
    writer.write("\n");
    writer.write("  var dt_datetime = obj_caller.prs_time(\n");
    writer.write("    (document.cal ? document.cal.time.value : ''),\n");
    writer.write("    new Date(n_datetime)\n");
    writer.write("  );\n");
    writer.write("\n");
    writer.write("  if (!dt_datetime) return;\n");
    writer.write("  obj_caller.popup(dt_datetime.valueOf(), with_root);\n");
    writer.write("}\n");
    writer.write("//]]> \n");
    writer.write("</script>\n");
    writer.write("</head>\n");
    writer.write(
        "<body bgcolor=\"#FFFFFF\" marginheight=\"5\" marginwidth=\"5\" topmargin=\"5\" leftmargin=\"5\" rightmargin=\"5\">\n");
    // replaced these lines with document.write so dom balanced in XHTML
    //        writer.write("<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\"
    // width=\"100%\">\n");
    //        writer.write("<tr><td bgcolor=\"#4682B4\">\n");
    //        writer.write("<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\"
    // width=\"100%\">\n");
    //        writer.write("<tr><td colspan=\"7\"><table cellspacing=\"0\" cellpadding=\"0\"
    // border=\"0\" width=\"100%\">\n");
    //        writer.write("<tr>\n");
    writer.write("<script language=\"JavaScript\">\n");
    //      writer.write("//<![CDATA[\n");
    //      writer.write("alert('got here');\n");
    //      writer.write("//<!--");
    writer.write(
        "document.write('<table>');"); // class=\"clsOTable\" cellspacing=\"0\" border=\"0\"
                                       // width=\"100%\">');\n");
    //      writer.write("document.write('<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\"
    // width=\"100%\">');\n");
    writer.write("document.write('<tr><td bgcolor=\"#4682B4\">');\n");
    writer.write(
        "document.write('<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">');\n");
    writer.write(
        "document.write('<tr><td colspan=\"7\"><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">');\n");
    writer.write("document.write('<tr>');\n");
    // following document.write() in original HTML/JavaScript was
    // nearly incomprehensible when generated into writer.write lines
    // broke up into shorter strings, hopefully more readable
    writer.write("document.write(\n");
    writer.write(
        "'<td>'+"
            +
            // using JavaScript ? operator
            "(obj_caller && obj_caller.year_scroll?"
            +
            // first alternative
            "'<a href=\"javascript:set_datetime_update('"
            + "+dt_prev_year.valueOf()+', root)\">"
            + "<img src=\"'+STR_ICONPATH+'prev_year.gif\" "
            + "width=\"16\" height=\"16\" border=\"0\" alt=\""
            + PREV_YEAR
            + "\"/></a>&#160;'"
            + ":"
            +
            // second alternative, a blank
            "'')+"
            + "'<a href=\"javascript:set_datetime_update("
            + "'+dt_prev_month.valueOf()+', root)\">"
            + "<img src=\"'+STR_ICONPATH+'prev.gif\" "
            + "width=\"16\" height=\"16\" border=\"0\" alt=\""
            + PREV_MONTH
            + "\"/></a></td>'+\n");
    writer.write(
        "'<td align=\"center\" width=\"100%\">"
            + "<font color=\"#ffffff\">'+"
            + "ARR_MONTHS[dt_current.getMonth()]+' '+"
            + "dt_current.getFullYear() + '</font></td>'+\n");
    writer.write(
        "'<td><a href=\"javascript:set_datetime_update('"
            + "+dt_next_month.valueOf()+', root)\">"
            + "<img src=\"'+STR_ICONPATH+'next.gif\" "
            + "width=\"16\" height=\"16\" border=\"0\" alt=\""
            + NEXT_MONTH
            + "\"/></a>'+"
            + // ? operator, again...
            "(obj_caller && obj_caller.year_scroll?"
            +
            // first alternative
            "'&#160;<a href=\"javascript:set_datetime_update("
            + "'+dt_next_year.valueOf()+', root)\">"
            + "<img src=\"'+STR_ICONPATH+'next_year.gif\" "
            + "width=\"16\" height=\"16\" border=\"0\" alt=\""
            + NEXT_YEAR
            + "\"/></a>'"
            + ":"
            +
            // second alternative, blank
            "'')"
            + "+'</td>'\n");
    writer.write(");\n");
    writer.write("document.write('</tr>');\n");
    writer.write("document.write('</table></td></tr>');\n");
    writer.write("document.write('<tr>')\n");
    // replaced these lines with document.write so dom balanced in XHTML
    //        writer.write("</script>\n");
    //        writer.write("</tr>\n");
    //        writer.write("</table></td></tr>\n");
    //        writer.write("<tr>\n");
    //        writer.write("<script language=\"JavaScript\">\n");
    writer.write("\n");
    writer.write("// print weekdays titles\n");
    writer.write("for (var n=0; n < 7; n++)\n");
    writer.write(
        "	document.write('<td bgcolor=\"#87cefa\" align=\"center\"><font color=\"#ffffff\">'+ARR_WEEKDAYS[(NUM_WEEKSTART+n)%7]+'</font></td>');\n");
    writer.write("document.write('</tr>');\n");
    writer.write("\n");
    writer.write("// print calendar table\n");
    writer.write("var dt_current_day = new Date(dt_firstday);\n");
    writer.write("while (dt_current_day.getMonth() == dt_current.getMonth() ||\n");
    writer.write("	dt_current_day.getMonth() == dt_firstday.getMonth()) {\n");
    writer.write("	// print row heder\n");
    writer.write("	document.write('<tr>');\n");
    writer.write("	for (var n_current_wday=0; n_current_wday < 7; n_current_wday++) {\n");
    writer.write("		if (dt_current_day.getDate() == dt_current.getDate()  && \n");
    writer.write("			dt_current_day.getMonth() == dt_current.getMonth())\n");
    writer.write("			// print current date\n");
    writer.write("			document.write('<td bgcolor=\"#ffb6c1\" align=\"center\" width=\"14%\">');\n");
    writer.write("		else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)\n");
    writer.write("			// weekend days\n");
    writer.write("			document.write('<td bgcolor=\"#dbeaf5\" align=\"center\" width=\"14%\">');\n");
    writer.write("		else\n");
    writer.write("			// print working days of current month\n");
    writer.write("			document.write('<td bgcolor=\"#ffffff\" align=\"center\" width=\"14%\">');\n");
    writer.write("\n");
    writer.write(
        "		document.write('<a href=\"javascript:set_datetime('+dt_current_day.valueOf() +', true);\">');\n");
    writer.write("\n");
    writer.write("		if (dt_current_day.getMonth() == this.dt_current.getMonth())\n");
    writer.write("			// print days of current month\n");
    writer.write("			document.write('<font color=\"#000000\">');\n");
    writer.write("		else\n");
    writer.write("			// print days of other months\n");
    writer.write("			document.write('<font color=\"#606060\">');\n");
    writer.write("\n");
    writer.write("		document.write(dt_current_day.getDate()+'</font></font></a></td>');\n");
    writer.write("		dt_current_day.setDate(dt_current_day.getDate()+1);\n");
    writer.write("	}\n");
    writer.write("	// print row footer\n");
    writer.write("	document.write('</td></td></tr>');\n");
    writer.write("}\n");
    writer.write("if (obj_caller  &&  obj_caller.time_comp)\n");
    writer.write(
        "	document.write('<form onsubmit=\"javascript:set_datetime('+dt_current.valueOf()+', true)\" name=\"cal\"><tr><td colspan=\"7\" bgcolor=\"#87CEFA\"><font color=\"White\" face=\"tahoma, verdana\" size=\"2\">Time: <input type=\"text\" name=\"time\" value=\"'+obj_caller.gen_time(this.dt_current)+'\" size=\"8\" maxlength=\"8\"/></font></td></tr></form>');\n");
    writer.write("document.write('</table></td></tr></table>');\n");
    //      writer.write("//]]> \n");
    writer.write("</script>\n");
    // replaced these lines with document.write so DOM balanced in XHTML
    //        writer.write("</tr></td>\n");
    //        writer.write("</table></tr></td>\n");
    //        writer.write("</table>\n");
    writer.write("</body>\n");
    writer.write("</html>\n");
    writer.write("\n");
  }
  /**
   * This method parses the specified string into a date.
   *
   * @param dateStr The date string to parse.
   * @param pos The input and output parse position
   * @return The parsed date, or <code>null</code> if the string cannot be parsed.
   */
  public Date parse(String dateStr, ParsePosition pos) {
    int fmt_index = 0;
    int fmt_max = pattern.length();

    calendar.clear();
    boolean saw_timezone = false;
    int quote_start = -1;
    boolean is2DigitYear = false;
    try {
      for (; fmt_index < fmt_max; ++fmt_index) {
        char ch = pattern.charAt(fmt_index);
        if (ch == '\'') {
          int index = pos.getIndex();
          if (fmt_index < fmt_max - 1 && pattern.charAt(fmt_index + 1) == '\'') {
            if (!expect(dateStr, pos, ch)) return null;
            ++fmt_index;
          } else quote_start = quote_start < 0 ? fmt_index : -1;
          continue;
        }

        if (quote_start != -1 || ((ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z'))) {
          if (!expect(dateStr, pos, ch)) return null;
          continue;
        }

        // We've arrived at a potential pattern character in the
        // pattern.
        int fmt_count = 1;
        while (++fmt_index < fmt_max && pattern.charAt(fmt_index) == ch) {
          ++fmt_count;
        }

        // We might need to limit the number of digits to parse in
        // some cases.  We look to the next pattern character to
        // decide.
        boolean limit_digits = false;
        if (fmt_index < fmt_max && standardChars.indexOf(pattern.charAt(fmt_index)) >= 0)
          limit_digits = true;
        --fmt_index;

        // We can handle most fields automatically: most either are
        // numeric or are looked up in a string vector.  In some cases
        // we need an offset.  When numeric, `offset' is added to the
        // resulting value.  When doing a string lookup, offset is the
        // initial index into the string array.
        int calendar_field;
        boolean is_numeric = true;
        int offset = 0;
        boolean maybe2DigitYear = false;
        boolean oneBasedHour = false;
        boolean oneBasedHourOfDay = false;
        Integer simpleOffset;
        String[] set1 = null;
        String[] set2 = null;
        switch (ch) {
          case 'd':
            calendar_field = Calendar.DATE;
            break;
          case 'D':
            calendar_field = Calendar.DAY_OF_YEAR;
            break;
          case 'F':
            calendar_field = Calendar.DAY_OF_WEEK_IN_MONTH;
            break;
          case 'E':
            is_numeric = false;
            offset = 1;
            calendar_field = Calendar.DAY_OF_WEEK;
            set1 = formatData.getWeekdays();
            set2 = formatData.getShortWeekdays();
            break;
          case 'w':
            calendar_field = Calendar.WEEK_OF_YEAR;
            break;
          case 'W':
            calendar_field = Calendar.WEEK_OF_MONTH;
            break;
          case 'M':
            calendar_field = Calendar.MONTH;
            if (fmt_count <= 2) offset = -1;
            else {
              is_numeric = false;
              set1 = formatData.getMonths();
              set2 = formatData.getShortMonths();
            }
            break;
          case 'y':
            calendar_field = Calendar.YEAR;
            if (fmt_count <= 2) maybe2DigitYear = true;
            break;
          case 'K':
            calendar_field = Calendar.HOUR;
            break;
          case 'h':
            calendar_field = Calendar.HOUR;
            oneBasedHour = true;
            break;
          case 'H':
            calendar_field = Calendar.HOUR_OF_DAY;
            break;
          case 'k':
            calendar_field = Calendar.HOUR_OF_DAY;
            oneBasedHourOfDay = true;
            break;
          case 'm':
            calendar_field = Calendar.MINUTE;
            break;
          case 's':
            calendar_field = Calendar.SECOND;
            break;
          case 'S':
            calendar_field = Calendar.MILLISECOND;
            break;
          case 'a':
            is_numeric = false;
            calendar_field = Calendar.AM_PM;
            set1 = formatData.getAmPmStrings();
            break;
          case 'z':
          case 'Z':
            // We need a special case for the timezone, because it
            // uses a different data structure than the other cases.
            is_numeric = false;
            calendar_field = Calendar.ZONE_OFFSET;
            String[][] zoneStrings = formatData.getZoneStrings();
            int zoneCount = zoneStrings.length;
            int index = pos.getIndex();
            boolean found_zone = false;
            simpleOffset = computeOffset(dateStr.substring(index));
            if (simpleOffset != null) {
              found_zone = true;
              saw_timezone = true;
              calendar.set(Calendar.DST_OFFSET, 0);
              offset = simpleOffset.intValue();
            } else {
              for (int j = 0; j < zoneCount; j++) {
                String[] strings = zoneStrings[j];
                int k;
                for (k = 0; k < strings.length; ++k) {
                  if (dateStr.startsWith(strings[k], index)) break;
                }
                if (k != strings.length) {
                  found_zone = true;
                  saw_timezone = true;
                  TimeZone tz = TimeZone.getTimeZone(strings[0]);
                  // Check if it's a DST zone or ordinary
                  if (k == 3 || k == 4) calendar.set(Calendar.DST_OFFSET, tz.getDSTSavings());
                  else calendar.set(Calendar.DST_OFFSET, 0);
                  offset = tz.getRawOffset();
                  pos.setIndex(index + strings[k].length());
                  break;
                }
              }
            }
            if (!found_zone) {
              pos.setErrorIndex(pos.getIndex());
              return null;
            }
            break;
          default:
            pos.setErrorIndex(pos.getIndex());
            return null;
        }

        // Compute the value we should assign to the field.
        int value;
        int index = -1;
        if (is_numeric) {
          numberFormat.setMinimumIntegerDigits(fmt_count);
          if (limit_digits) numberFormat.setMaximumIntegerDigits(fmt_count);
          if (maybe2DigitYear) index = pos.getIndex();
          Number n = numberFormat.parse(dateStr, pos);
          if (pos == null || !(n instanceof Long)) return null;
          value = n.intValue() + offset;
        } else if (set1 != null) {
          index = pos.getIndex();
          int i;
          boolean found = false;
          for (i = offset; i < set1.length; ++i) {
            if (set1[i] != null)
              if (dateStr.toUpperCase().startsWith(set1[i].toUpperCase(), index)) {
                found = true;
                pos.setIndex(index + set1[i].length());
                break;
              }
          }
          if (!found && set2 != null) {
            for (i = offset; i < set2.length; ++i) {
              if (set2[i] != null)
                if (dateStr.toUpperCase().startsWith(set2[i].toUpperCase(), index)) {
                  found = true;
                  pos.setIndex(index + set2[i].length());
                  break;
                }
            }
          }
          if (!found) {
            pos.setErrorIndex(index);
            return null;
          }
          value = i;
        } else value = offset;

        if (maybe2DigitYear) {
          // Parse into default century if the numeric year string has
          // exactly 2 digits.
          int digit_count = pos.getIndex() - index;
          if (digit_count == 2) {
            is2DigitYear = true;
            value += defaultCentury;
          }
        }

        // Calendar uses 0-based hours.
        // I.e. 00:00 AM is midnight, not 12 AM or 24:00
        if (oneBasedHour && value == 12) value = 0;

        if (oneBasedHourOfDay && value == 24) value = 0;

        // Assign the value and move on.
        calendar.set(calendar_field, value);
      }

      if (is2DigitYear) {
        // Apply the 80-20 heuristic to dermine the full year based on
        // defaultCenturyStart.
        int year = calendar.get(Calendar.YEAR);
        if (calendar.getTime().compareTo(defaultCenturyStart) < 0)
          calendar.set(Calendar.YEAR, year + 100);
      }
      if (!saw_timezone) {
        // Use the real rules to determine whether or not this
        // particular time is in daylight savings.
        calendar.clear(Calendar.DST_OFFSET);
        calendar.clear(Calendar.ZONE_OFFSET);
      }
      return calendar.getTime();
    } catch (IllegalArgumentException x) {
      pos.setErrorIndex(pos.getIndex());
      return null;
    }
  }
Ejemplo n.º 14
0
  /**
   * Returns a list of Rules given a pattern.
   *
   * @return a {@code List} of Rule objects
   * @throws IllegalArgumentException if pattern is invalid
   */
  protected List<Rule> parsePattern() {
    DateFormatSymbols symbols = new DateFormatSymbols(mLocale);
    List<Rule> rules = new ArrayList<Rule>();

    String[] ERAs = symbols.getEras();
    String[] months = symbols.getMonths();
    String[] shortMonths = symbols.getShortMonths();
    String[] weekdays = symbols.getWeekdays();
    String[] shortWeekdays = symbols.getShortWeekdays();
    String[] AmPmStrings = symbols.getAmPmStrings();

    int length = mPattern.length();
    int[] indexRef = new int[1];

    for (int i = 0; i < length; i++) {
      indexRef[0] = i;
      String token = parseToken(mPattern, indexRef);
      i = indexRef[0];

      int tokenLen = token.length();
      if (tokenLen == 0) {
        break;
      }

      Rule rule;
      char c = token.charAt(0);

      switch (c) {
        case 'G': // era designator (text)
          rule = new TextField(Calendar.ERA, ERAs);
          break;
        case 'y': // year (number)
          if (tokenLen == 2) {
            rule = TwoDigitYearField.INSTANCE;
          } else {
            rule = selectNumberRule(Calendar.YEAR, tokenLen < 4 ? 4 : tokenLen);
          }
          break;
        case 'M': // month in year (text and number)
          if (tokenLen >= 4) {
            rule = new TextField(Calendar.MONTH, months);
          } else if (tokenLen == 3) {
            rule = new TextField(Calendar.MONTH, shortMonths);
          } else if (tokenLen == 2) {
            rule = TwoDigitMonthField.INSTANCE;
          } else {
            rule = UnpaddedMonthField.INSTANCE;
          }
          break;
        case 'd': // day in month (number)
          rule = selectNumberRule(Calendar.DAY_OF_MONTH, tokenLen);
          break;
        case 'h': // hour in am/pm (number, 1..12)
          rule = new TwelveHourField(selectNumberRule(Calendar.HOUR, tokenLen));
          break;
        case 'H': // hour in day (number, 0..23)
          rule = selectNumberRule(Calendar.HOUR_OF_DAY, tokenLen);
          break;
        case 'm': // minute in hour (number)
          rule = selectNumberRule(Calendar.MINUTE, tokenLen);
          break;
        case 's': // second in minute (number)
          rule = selectNumberRule(Calendar.SECOND, tokenLen);
          break;
        case 'S': // millisecond (number)
          rule = selectNumberRule(Calendar.MILLISECOND, tokenLen);
          break;
        case 'E': // day in week (text)
          rule = new TextField(Calendar.DAY_OF_WEEK, tokenLen < 4 ? shortWeekdays : weekdays);
          break;
        case 'D': // day in year (number)
          rule = selectNumberRule(Calendar.DAY_OF_YEAR, tokenLen);
          break;
        case 'F': // day of week in month (number)
          rule = selectNumberRule(Calendar.DAY_OF_WEEK_IN_MONTH, tokenLen);
          break;
        case 'w': // week in year (number)
          rule = selectNumberRule(Calendar.WEEK_OF_YEAR, tokenLen);
          break;
        case 'W': // week in month (number)
          rule = selectNumberRule(Calendar.WEEK_OF_MONTH, tokenLen);
          break;
        case 'a': // am/pm marker (text)
          rule = new TextField(Calendar.AM_PM, AmPmStrings);
          break;
        case 'k': // hour in day (1..24)
          rule = new TwentyFourHourField(selectNumberRule(Calendar.HOUR_OF_DAY, tokenLen));
          break;
        case 'K': // hour in am/pm (0..11)
          rule = selectNumberRule(Calendar.HOUR, tokenLen);
          break;
        case 'z': // time zone (text)
          if (tokenLen >= 4) {
            rule = new TimeZoneNameRule(mTimeZone, mLocale, TimeZone.LONG);
          } else {
            rule = new TimeZoneNameRule(mTimeZone, mLocale, TimeZone.SHORT);
          }
          break;
        case 'Z': // time zone (value)
          if (tokenLen == 1) {
            rule = TimeZoneNumberRule.INSTANCE_NO_COLON;
          } else {
            rule = TimeZoneNumberRule.INSTANCE_COLON;
          }
          break;
        case '\'': // literal text
          String sub = token.substring(1);
          if (sub.length() == 1) {
            rule = new CharacterLiteral(sub.charAt(0));
          } else {
            rule = new StringLiteral(sub);
          }
          break;
        default:
          throw new IllegalArgumentException("Illegal pattern component: " + token);
      }

      rules.add(rule);
    }

    return rules;
  }
Ejemplo n.º 15
0
 public LogDateChooser(String label) {
   thisDialog = this;
   border = new EtchedBorder();
   setBorder(border);
   Font f = new Font("Helvetica", Font.PLAIN, 10);
   title = new JLabel(label);
   add(title);
   setLayout(new DateLayout());
   dfs = new DateFormatSymbols();
   months = dfs.getMonths();
   weekdays = dfs.getShortWeekdays();
   for (int i = 0; i < 7; i++) {
     days[i] = new JLabel(weekdays[i + 1]);
     days[i].setFont(f);
     add(days[i]);
   }
   gc = new GregorianCalendar();
   mDown = new JButton("<");
   mDown.setMargin(new Insets(0, 0, 0, 0));
   mDown.addActionListener(new MDownEar());
   mDown.setBorderPainted(false);
   mDown.setFont(f);
   mDown.setForeground(Color.BLUE);
   add(mDown);
   mUp = new JButton(">");
   mUp.setMargin(new Insets(0, 0, 0, 0));
   mUp.addActionListener(new MUpEar());
   mUp.setBorderPainted(false);
   mUp.setFont(f);
   mUp.setForeground(Color.BLUE);
   add(mUp);
   month = new JLabel(months[gc.get(Calendar.MONTH)]);
   month.setHorizontalAlignment(SwingConstants.CENTER);
   month.setFont(f);
   add(month);
   year = new JLabel(new Integer(gc.get(Calendar.YEAR)).toString());
   year.setFont(f);
   add(year);
   yDown = new JButton("<");
   yDown.setMargin(new Insets(0, 0, 0, 0));
   yDown.addActionListener(new YDownEar());
   yDown.setBorderPainted(false);
   yDown.setFont(f);
   yDown.setForeground(Color.BLUE);
   add(yDown);
   yUp = new JButton(">");
   yUp.setMargin(new Insets(0, 0, 0, 0));
   yUp.addActionListener(new YUpEar());
   yUp.setBorderPainted(false);
   yUp.setFont(f);
   yUp.setForeground(Color.BLUE);
   add(yUp);
   //    System.out.println(year.getText());
   NumberEar numberEar = new NumberEar();
   for (int i = 0; i < 31; i++) {
     number[i] = new JButton(new Integer(i + 1).toString());
     number[i].setMargin(new Insets(0, 0, 0, 0));
     number[i].addActionListener(numberEar);
     number[i].setBorderPainted(false);
     number[i].setContentAreaFilled(false);
     number[i].setFont(f);
     number[i].setForeground(Color.BLUE);
     add(number[i]);
   }
   number[0].setForeground(Color.CYAN);
 }
Ejemplo n.º 16
0
  Double getCharge(String date, double howLong) {
    int jday = 0;
    Double nMins;
    String day, time, rate = null;
    double remain = howLong;
    StringTokenizer st = new StringTokenizer(date);
    day = st.nextToken();
    time = st.nextToken();
    time = st.nextToken();
    time = st.nextToken().substring(0, 5);
    nMins = AProps.getInstance().toMinutes(time);
    DateFormatSymbols dfs = new DateFormatSymbols();
    String[] days = dfs.getShortWeekdays();
    for (int j = 1; j < days.length; j++) {
      if (day.compareTo(days[j]) == 0) {
        jday = j;
        break;
      }
    }
    int n = rates.size(), tableNMin;
    // One Rate for the entire Login session
    if (n == 1) { // only one flat rate
      // Get time in hours
      Double howLongHr = howLong / 60.0;
      // Calc cost of logon time
      Double cost = new Double(rates(0).loginhr).doubleValue() * howLongHr;
      // Cost of each login
      Double login = new Double(rates(0).login).doubleValue();
      cost = cost + login;
      return (cost);
    }
    // Multiple Rates for this login session
    // Default to last rate in list so that if last rate is eg., Fri and
    // the current day is Sun, it will still use Friday.
    iRE = n - 1;
    RateEntry tmpRE, saveRE = rates(n - 1);
    for (int i = 0; i < n; i++) {
      tmpRE = rates(i);
      if (tmpRE.dayOfWeek() < jday) {
        saveRE = tmpRE;
        iRE = i;
      }
      tableNMin = (AProps.getInstance().toMinutes(tmpRE.time())).intValue();
      if ((tmpRE.dayOfWeek() == jday) && (nMins.intValue() > tableNMin)) {
        saveRE = tmpRE;
        iRE = i;
      }
    }
    tRE = iRE + 1; // iRE set rate, tRE set time until
    if (tRE >= n) tRE = 0;
    Double charge;
    int ndays;
    double diffMins;
    if (tRE == 0) {
      ndays = rates(0).dayOfWeek() + (7 - jday);
    } else {
      ndays = rates(tRE).dayOfWeek() - jday;
    }
    if (ndays > 7) ndays = ndays - 7;
    int nmin = AProps.getInstance().toMinutes(rates(tRE).time()).intValue() - nMins.intValue();
    diffMins = ndays * 24 * 60 + nmin;
    if (remain < diffMins) {
      diffMins = remain;
    }
    // Calc charge for the first period of time up to the next rate change
    Double hours = new Double(diffMins / 60.0);
    charge = new Double(hours * new Double(rates(iRE).loginhr()));
    // Add in the per session login rate
    charge += new Double(rates(iRE).login());
    remain -= diffMins;

    // now we have the charge for the first increment including the login,
    // calculate changes for remaining periods using their rates
    while (remain > 0.0) {

      if ((remain - rates(tRE).nMinutes()) >= 0) {

        charge += rates(tRE).nMinutes() * new Double(rates(tRE).loginhr()) / 60.0;
      } else {

        charge += remain * new Double(rates(tRE).loginhr()) / 60.0;
      }
      remain -= rates(tRE).nMinutes();
      iRE++;
      if (iRE >= n) iRE = 0;
      tRE++;
      if (tRE >= n) tRE = 0;
    }

    return (charge);
  }
Ejemplo n.º 17
0
  static String describeLocale(String name) {
    final StringBuilder result = new StringBuilder();
    result.append("<html>");

    final Locale locale = localeByName(name);

    result.append("<p>");
    append(result, "Display Name", locale.getDisplayName());
    append(result, "Localized Display Name", locale.getDisplayName(locale));

    if (locale.getLanguage().length() > 0) {
      String iso3Language = "(not available)";
      try {
        iso3Language = locale.getISO3Language();
      } catch (MissingResourceException ignored) {
      }

      result.append("<p>");
      append(result, "Display Language", locale.getDisplayLanguage());
      append(result, "Localized Display Language", locale.getDisplayLanguage(locale));
      append(result, "2-Letter Language Code", locale.getLanguage());
      append(result, "3-Letter Language Code", iso3Language);
    }
    if (locale.getCountry().length() > 0) {
      String iso3Country = "(not available)";
      try {
        iso3Country = locale.getISO3Country();
      } catch (MissingResourceException ignored) {
      }

      result.append("<p>");
      append(result, "Display Country", locale.getDisplayCountry());
      append(result, "Localized Display Country", locale.getDisplayCountry(locale));
      append(result, "2-Letter Country Code", locale.getCountry());
      append(result, "3-Letter Country Code", iso3Country);
    }
    if (locale.getVariant().length() > 0) {
      result.append("<p>");
      append(result, "Display Variant", locale.getDisplayVariant());
      append(result, "Localized Display Variant", locale.getDisplayVariant(locale));
      append(result, "Variant Code", locale.getVariant());
    }

    result.append("<p><b>Number Formatting</b>");
    describeNumberFormat(result, "Decimal", NumberFormat.getInstance(locale), 1234.5, -1234.5);
    describeNumberFormat(result, "Integer", NumberFormat.getIntegerInstance(locale), 1234, -1234);
    describeNumberFormat(
        result, "Currency", NumberFormat.getCurrencyInstance(locale), 1234.5, -1234.5);
    describeNumberFormat(result, "Percent", NumberFormat.getPercentInstance(locale), 12.3);

    boolean hasLocaleData = hasLocaleData();

    if (!hasLocaleData) {
      result.append("<p><b>Decimal Format Symbols</b>");
      NumberFormat nf = NumberFormat.getInstance(locale);
      if (nf instanceof DecimalFormat) {
        describeDecimalFormatSymbols(result, ((DecimalFormat) nf).getDecimalFormatSymbols());
      } else {
        result.append("(Didn't expect " + nf.getClass() + ".)");
      }
    }

    Date now =
        new Date(); // FIXME: it might be more useful to always show a time in the afternoon, to
    // make 24-hour patterns more obvious.
    result.append("<p><b>Date/Time Formatting</b>");
    describeDateFormat(
        result, "Full Date", DateFormat.getDateInstance(DateFormat.FULL, locale), now);
    describeDateFormat(
        result, "Long Date", DateFormat.getDateInstance(DateFormat.LONG, locale), now);
    describeDateFormat(
        result, "Medium Date", DateFormat.getDateInstance(DateFormat.MEDIUM, locale), now);
    describeDateFormat(
        result, "Short Date", DateFormat.getDateInstance(DateFormat.SHORT, locale), now);
    result.append("<p>");
    describeDateFormat(
        result, "Full Time", DateFormat.getTimeInstance(DateFormat.FULL, locale), now);
    describeDateFormat(
        result, "Long Time", DateFormat.getTimeInstance(DateFormat.LONG, locale), now);
    describeDateFormat(
        result, "Medium Time", DateFormat.getTimeInstance(DateFormat.MEDIUM, locale), now);
    describeDateFormat(
        result, "Short Time", DateFormat.getTimeInstance(DateFormat.SHORT, locale), now);
    result.append("<p>");
    describeDateFormat(
        result,
        "Full Date/Time",
        DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, locale),
        now);
    describeDateFormat(
        result,
        "Long Date/Time",
        DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale),
        now);
    describeDateFormat(
        result,
        "Medium Date/Time",
        DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale),
        now);
    describeDateFormat(
        result,
        "Short Date/Time",
        DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale),
        now);

    if (!hasLocaleData) {
      result.append("<p><b>Date Format Symbols</b><p>");
      DateFormat edf = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
      DateFormatSymbols edfs = ((SimpleDateFormat) edf).getDateFormatSymbols();
      DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, locale);
      DateFormatSymbols dfs = ((SimpleDateFormat) df).getDateFormatSymbols();
      append(result, "Local Pattern Chars", dfs.getLocalPatternChars());
      append(result, "Am/pm", Arrays.toString(dfs.getAmPmStrings()));
      append(result, "Eras", Arrays.toString(dfs.getEras()));
      append(result, "Months", Arrays.toString(dfs.getMonths()));
      append(result, "Short Months", Arrays.toString(dfs.getShortMonths()));
      append(result, "Weekdays", Arrays.toString(dfs.getWeekdays()));
      append(result, "Short Weekdays", Arrays.toString(dfs.getShortWeekdays()));
    }

    result.append("<p><b>Calendar</b><p>");
    Calendar c = Calendar.getInstance(locale);
    int firstDayOfWeek = c.getFirstDayOfWeek();
    String firstDayOfWeekString = new DateFormatSymbols(locale).getWeekdays()[firstDayOfWeek];
    String englishFirstDayOfWeekString =
        new DateFormatSymbols(Locale.US).getWeekdays()[firstDayOfWeek];
    String firstDayOfWeekDetails = firstDayOfWeek + " '" + firstDayOfWeekString + "'";
    if (!englishFirstDayOfWeekString.equals(firstDayOfWeekString)) {
      firstDayOfWeekDetails += " (" + englishFirstDayOfWeekString + ")";
    }
    append(result, "First Day of the Week", firstDayOfWeekDetails);
    append(result, "Minimal Days in First Week", c.getMinimalDaysInFirstWeek());

    // If this locale specifies a country, check out the currency.
    // Languages don't have currencies; countries do.
    if (!locale.getCountry().equals("")) {
      result.append("<p><b>Currency</b><p>");
      try {
        Currency currency = Currency.getInstance(locale);
        append(result, "ISO 4217 Currency Code", currency.getCurrencyCode());
        append(
            result,
            "Currency Symbol",
            unicodeString(currency.getSymbol(locale)) + " (" + currency.getSymbol(Locale.US) + ")");
        append(result, "Default Fraction Digits", currency.getDefaultFractionDigits());
      } catch (IllegalArgumentException ex) {
        result.append(
            "<p>(This version of Android is unable to return a Currency for this Locale.)");
      }
    }

    result.append("<p><b>Data Availability</b><p>");
    appendAvailability(result, locale, "BreakIterator", BreakIterator.class);
    appendAvailability(result, locale, "Calendar", NumberFormat.class);
    appendAvailability(result, locale, "Collator", Collator.class);
    appendAvailability(result, locale, "DateFormat", DateFormat.class);
    appendAvailability(result, locale, "DateFormatSymbols", DateFormatSymbols.class);
    appendAvailability(result, locale, "DecimalFormatSymbols", DecimalFormatSymbols.class);
    appendAvailability(result, locale, "NumberFormat", NumberFormat.class);

    if (hasLocaleData) {
      result.append("<p><b>libcore.icu.LocaleData</b>");
      try {
        Object enUsData = getLocaleDataInstance(Locale.US);
        Object localeData = getLocaleDataInstance(locale);
        String[] previous;

        result.append("<p>");
        describeStringArray(result, "amPm", enUsData, localeData, null);
        describeStringArray(result, "eras", enUsData, localeData, null);

        result.append("<p>");
        previous = describeStringArray(result, "longMonthNames", enUsData, localeData, null);
        describeStringArray(result, "longStandAloneMonthNames", enUsData, localeData, previous);
        previous = describeStringArray(result, "shortMonthNames", enUsData, localeData, null);
        describeStringArray(result, "shortStandAloneMonthNames", enUsData, localeData, previous);
        previous = describeStringArray(result, "tinyMonthNames", enUsData, localeData, null);
        describeStringArray(result, "tinyStandAloneMonthNames", enUsData, localeData, previous);

        result.append("<p>");
        previous = describeStringArray(result, "longWeekdayNames", enUsData, localeData, null);
        describeStringArray(result, "longStandAloneWeekdayNames", enUsData, localeData, previous);
        previous = describeStringArray(result, "shortWeekdayNames", enUsData, localeData, null);
        describeStringArray(result, "shortStandAloneWeekdayNames", enUsData, localeData, previous);
        previous = describeStringArray(result, "tinyWeekdayNames", enUsData, localeData, null);
        describeStringArray(result, "tinyStandAloneWeekdayNames", enUsData, localeData, previous);

        result.append("<p>");
        describeString(result, "yesterday", enUsData, localeData);
        describeString(result, "today", enUsData, localeData);
        describeString(result, "tomorrow", enUsData, localeData);

        result.append("<p>");
        describeString(result, "timeFormat12", enUsData, localeData);
        describeString(result, "timeFormat24", enUsData, localeData);

        result.append("<p>");
        describeChar(result, "zeroDigit", enUsData, localeData);
        describeChar(result, "decimalSeparator", enUsData, localeData);
        describeChar(result, "groupingSeparator", enUsData, localeData);
        describeChar(result, "patternSeparator", enUsData, localeData);
        describeChar(result, "percent", enUsData, localeData);
        describeChar(result, "perMill", enUsData, localeData);
        describeChar(result, "monetarySeparator", enUsData, localeData);
        describeChar(result, "minusSign", enUsData, localeData);
        describeString(result, "exponentSeparator", enUsData, localeData);
        describeString(result, "infinity", enUsData, localeData);
        describeString(result, "NaN", enUsData, localeData);

      } catch (Exception ex) {
        result.append("(" + ex.getClass().getSimpleName() + " thrown: " + ex.getMessage() + ")");
        System.err.println(ex);
      }
    }

    return result.toString();
  }
Ejemplo n.º 18
0
  protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
    IForm form = getForm(cycle);

    String name = form.getElementId(this);

    String format = getFormat();

    if (format == null) format = "dd MMM yyyy";

    SimpleDateFormat formatter = new SimpleDateFormat(format, getPage().getLocale());

    boolean disabled = isDisabled();

    if (!cycle.isRewinding()) {
      Body body = Body.get(cycle);

      if (body == null)
        throw new ApplicationRuntimeException(
            Tapestry.format("must-be-contained-by-body", "DatePicker"), this, null, null);

      Locale locale = getPage().getLocale();
      DateFormatSymbols dfs = new DateFormatSymbols(locale);
      Calendar cal = Calendar.getInstance(locale);

      Date value = getValue();

      Map symbols = new HashMap();

      symbols.put(SYM_NAME, name);
      symbols.put(SYM_FORMAT, format);
      symbols.put(SYM_INCL_WEEK, getIncludeWeek() ? Boolean.TRUE : Boolean.FALSE);

      symbols.put(SYM_MONTHNAMES, makeStringList(dfs.getMonths(), 0, 12));
      symbols.put(SYM_SHORT_MONTHNAMES, makeStringList(dfs.getShortMonths(), 0, 12));
      symbols.put(SYM_WEEKDAYNAMES, makeStringList(dfs.getWeekdays(), 1, 8));
      symbols.put(SYM_SHORT_WEEKDAYNAMES, makeStringList(dfs.getShortWeekdays(), 1, 8));
      symbols.put(SYM_FIRSTDAYINWEEK, new Integer(cal.getFirstDayOfWeek() - 1));
      symbols.put(SYM_MINDAYSINFIRSTWEEK, new Integer(cal.getMinimalDaysInFirstWeek()));
      symbols.put(SYM_FORMNAME, form.getName());
      symbols.put(SYM_VALUE, value);

      _script.execute(cycle, body, symbols);

      writer.beginEmpty("input");
      writer.attribute("type", "text");
      writer.attribute("name", name);
      writer.attribute("title", formatter.toLocalizedPattern());

      if (value != null) writer.attribute("value", formatter.format(value));

      if (disabled) writer.attribute("disabled", "disabled");

      renderInformalParameters(writer, cycle);

      writer.printRaw("&nbsp;");

      if (!disabled) {
        writer.begin("a");
        writer.attribute("href", (String) symbols.get(SYM_BUTTONONCLICKHANDLER));
      }

      IAsset icon = getIcon();

      writer.beginEmpty("img");
      writer.attribute("src", icon.buildURL(cycle));
      writer.attribute("border", 0);

      if (!disabled) writer.end(); // <a>
    }

    if (form.isRewinding()) {
      if (disabled) return;

      String textValue = cycle.getRequestContext().getParameter(name);

      if (Tapestry.isBlank(textValue)) return;

      try {
        Date value = formatter.parse(textValue);

        setValue(value);
      } catch (ParseException ex) {
      }
    }
  }