001 /*
002 * SonarQube, open source software quality management tool.
003 * Copyright (C) 2008-2014 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * SonarQube is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * SonarQube is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
019 */
020 package org.sonar.wsclient.unmarshallers;
021
022 import org.json.simple.JSONArray;
023
024 import javax.annotation.CheckForNull;
025 import javax.annotation.Nullable;
026
027 import java.text.ParseException;
028 import java.text.SimpleDateFormat;
029 import java.util.Date;
030 import java.util.Map;
031
032 // Godin: we will use raw types here, because typically JSONObject passed as an argument
033 @SuppressWarnings("rawtypes")
034 public final class JsonUtils {
035
036 private JsonUtils() {
037 // only static methods
038 }
039
040 @CheckForNull
041 public static String getString(Map obj, String field) {
042 Object value = obj.get(field);
043 if (value instanceof String || value instanceof Number) {
044 return value.toString();
045 }
046 return null;
047 }
048
049 @CheckForNull
050 public static Integer getInteger(Map obj, String field) {
051 Object value = obj.get(field);
052 if (value != null) {
053 return ((Long) value).intValue();
054 }
055 return null;
056 }
057
058 @CheckForNull
059 public static Boolean getBoolean(Map obj, String field) {
060 Object value = obj.get(field);
061 if (value != null) {
062 return (Boolean) value;
063 }
064 return null;
065 }
066
067 @CheckForNull
068 public static Long getLong(Map obj, String field) {
069 Object value = obj.get(field);
070 if (value != null) {
071 return (Long) value;
072 }
073 return null;
074 }
075
076 @CheckForNull
077 public static Double getDouble(Map obj, String field) {
078 Object value = obj.get(field);
079 if (value != null) {
080 if (value instanceof Long) {
081 return ((Long) value).doubleValue();
082 }
083 return (Double) value;
084 }
085 return null;
086 }
087
088 /**
089 * @since 2.5
090 */
091 @CheckForNull
092 public static JSONArray getArray(Map obj, String field) {
093 return (JSONArray) obj.get(field);
094 }
095
096 @CheckForNull
097 public static Date getDateTime(Map obj, String field) {
098 return parseDate(getString(obj, field), "yyyy-MM-dd'T'HH:mm:ssZ");
099 }
100
101 @CheckForNull
102 public static Date getDate(Map obj, String field) {
103 return parseDate(getString(obj, field));
104 }
105
106 @CheckForNull
107 public static Date parseDate(@Nullable String value) {
108 return parseDate(value, "yyyy-MM-dd");
109 }
110
111 @CheckForNull
112 private static Date parseDate(@Nullable String value, String format) {
113 if (value != null) {
114 try {
115 SimpleDateFormat dateFormat = new SimpleDateFormat(format);
116 return dateFormat.parse(value);
117
118 } catch (ParseException e) {
119 throw new IllegalArgumentException("Fail to parse date '" + value + "': " + format, e);
120 }
121 }
122 return null;
123 }
124
125 }