You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bh...@apache.org on 2014/07/30 21:06:34 UTC

[17/38] git commit: BB10: Initial implementation of getDatePattern.

BB10: Initial implementation of getDatePattern.

* Just default value now, not sure how to apply options yet.


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/commit/17d16d56
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/tree/17d16d56
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/diff/17d16d56

Branch: refs/heads/lyon-g11n
Commit: 17d16d56a41bdc3a10360a58336f8c7222cbbc89
Parents: 471bdb3
Author: Lianghui Chen <li...@blackberry.com>
Authored: Wed Jul 23 16:15:30 2014 -0400
Committer: Lianghui Chen <li...@blackberry.com>
Committed: Mon Jul 28 15:10:46 2014 -0400

----------------------------------------------------------------------
 .../native/src/globalization_ndk.cpp            | 62 +++++++++++++++++++-
 1 file changed, 61 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization/blob/17d16d56/src/blackberry10/native/src/globalization_ndk.cpp
----------------------------------------------------------------------
diff --git a/src/blackberry10/native/src/globalization_ndk.cpp b/src/blackberry10/native/src/globalization_ndk.cpp
index 257ce38..48c63fc 100644
--- a/src/blackberry10/native/src/globalization_ndk.cpp
+++ b/src/blackberry10/native/src/globalization_ndk.cpp
@@ -20,6 +20,7 @@
 #include <sys/slog2.h>
 #include <unicode/calendar.h>
 #include <unicode/datefmt.h>
+#include <unicode/smpdtfmt.h>
 #include "globalization_ndk.hpp"
 #include "globalization_js.hpp"
 
@@ -92,6 +93,21 @@ std::string resultInJson(const UDate& date)
     return writer.write(root);
 }
 
+std::string resultInJson(const std::string& pattern, const std::string& timezone, int utc_offset, int dst_offset)
+{
+    Json::Value result;
+    result["pattern"] = pattern;
+    result["timezone"] = timezone;
+    result["utc_offset"] = utc_offset;
+    result["dst_offset"] = dst_offset;
+
+    Json::Value root;
+    root["result"] = result;
+
+    Json::FastWriter writer;
+    return writer.write(root);
+}
+
 GlobalizationNDK::GlobalizationNDK(GlobalizationJS *parent) {
 	m_pParent = parent;
 }
@@ -329,7 +345,51 @@ std::string GlobalizationNDK::stringToDate(const std::string& args)
 
 std::string GlobalizationNDK::getDatePattern(const std::string& args)
 {
-    return errorInJson(UNKNOWN_ERROR, "Not supported!");
+    DateFormat::EStyle dstyle = DateFormat::kShort, tstyle = DateFormat::kShort;
+
+    if (!args.empty()) {
+        Json::Reader reader;
+        Json::Value root;
+        bool parse = reader.parse(args, root);
+
+        if (!parse) {
+            slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDatePattern: invalid json data: %s",
+                    args.c_str());
+            return errorInJson(PARSING_ERROR, "Parameters not valid json format!");
+        }
+
+        Json::Value options = root["options"];
+
+        std::string error;
+        if (!handleDateOptions(options, dstyle, tstyle, error))
+            return errorInJson(PARSING_ERROR, error);
+    }
+
+    UErrorCode status = U_ZERO_ERROR;
+    SimpleDateFormat* sdf = new SimpleDateFormat(status);
+    if (!sdf) {
+        slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDatePattern: unable to create SimpleDateFormat instance: %d.",
+                status);
+        return errorInJson(UNKNOWN_ERROR, "Unable to create SimpleDateFormat instance!");
+    }
+
+    UnicodeString pt;
+    sdf->toPattern(pt);
+    std::string ptUtf8;
+    pt.toUTF8String(ptUtf8);
+
+    const TimeZone& tz = sdf->getTimeZone();
+    UnicodeString tzName;
+    tz.getDisplayName(tzName);
+    std::string tzUtf8;
+    tzName.toUTF8String(tzUtf8);
+
+    int utc_offset = tz.getRawOffset() / 1000; // UTC_OFFSET in seconds.
+    int dst_offset = tz.getDSTSavings() / 1000; // DST_OFFSET in seconds;
+
+    delete sdf;
+
+    return resultInJson(ptUtf8, tzUtf8, utc_offset, dst_offset);
 }
 
 std::string GlobalizationNDK::getDateNames(const std::string& args)