diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/AbstractCalendarWebScript.java b/source/java/org/alfresco/repo/web/scripts/calendar/AbstractCalendarWebScript.java index 3e2da06838..af8d93a252 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/AbstractCalendarWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/AbstractCalendarWebScript.java @@ -20,6 +20,7 @@ package org.alfresco.repo.web.scripts.calendar; import java.io.IOException; import java.io.Serializable; +import java.io.StringWriter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -42,13 +43,15 @@ import org.alfresco.util.ISO8601DateFormat; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.json.JSONException; -import org.json.JSONObject; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; import org.json.JSONTokener; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; +import org.springframework.extensions.webscripts.json.JSONWriter; /** * @author Nick Burch @@ -150,18 +153,18 @@ public abstract class AbstractCalendarWebScript extends DeclarativeWebScript { boolean isAllDay = false; - if(json.has("startAt") && json.has("endAt")) + if(json.containsKey("startAt") && json.containsKey("endAt")) { // New style ISO8601 dates - entry.setStart(parseDate(json.getString("startAt"))); - entry.setEnd(parseDate(json.getString("endAt"))); - if(json.has("allday")) + entry.setStart(parseDate((String)json.get("startAt"))); + entry.setEnd(parseDate((String)json.get("endAt"))); + if(json.containsKey("allday")) { // TODO Handle All Day events properly, including timezones isAllDay = true; } } - else if(json.has("allday")) + else if(json.containsKey("allday")) { // Old style all-day event entry.setStart(parseDate(getOrNull(json, "from"))); @@ -171,8 +174,8 @@ public abstract class AbstractCalendarWebScript extends DeclarativeWebScript else { // Old style regular event - entry.setStart(parseDate(json.getString("from") + " " + json.getString("start"))); - entry.setEnd(parseDate(json.getString("to") + " " + json.getString("end"))); + entry.setStart(parseDate((String)json.get("from") + " " + (String)json.get("start"))); + entry.setEnd(parseDate((String)json.get("to") + " " + (String)json.get("end"))); } return isAllDay; @@ -180,9 +183,9 @@ public abstract class AbstractCalendarWebScript extends DeclarativeWebScript protected String getOrNull(JSONObject json, String key) throws JSONException { - if(json.has(key)) + if(json.containsKey(key)) { - return json.getString(key); + return (String)json.get(key); } return null; } @@ -237,13 +240,9 @@ public abstract class AbstractCalendarWebScript extends DeclarativeWebScript String page = req.getParameter("page"); if(page == null && json != null) { - if(json.has("page")) + if(json.containsKey("page")) { - try - { - page = json.getString("page"); - } - catch(JSONException e) {} + page = (String)json.get("page"); } } if(page == null) @@ -254,15 +253,18 @@ public abstract class AbstractCalendarWebScript extends DeclarativeWebScript try { - JSONObject activity = new JSONObject(); - activity.put("title", entry.getTitle()); - activity.put("page", page + dateOpt); + StringWriter activityJson = new StringWriter(); + JSONWriter activity = new JSONWriter(activityJson); + activity.startObject(); + activity.writeValue("title", entry.getTitle()); + activity.writeValue("page", page + dateOpt); + activity.endObject(); activityService.postActivity( "org.alfresco.calendar.event-" + event, site.getShortName(), CALENDAR_SERVICE_ACTIVITY_APP_NAME, - activity.toString() + activityJson.toString() ); } catch(Exception e) @@ -324,15 +326,16 @@ public abstract class AbstractCalendarWebScript extends DeclarativeWebScript } if(MimetypeMap.MIMETYPE_JSON.equals(contentType)) { + JSONParser parser = new JSONParser(); try { - json = new JSONObject(new JSONTokener(req.getContent().getContent())); + json = (JSONObject)parser.parse(req.getContent().getContent()); } catch(IOException io) { return buildError("Invalid JSON: " + io.getMessage()); } - catch(JSONException je) + catch(org.json.simple.parser.ParseException je) { return buildError("Invalid JSON: " + je.getMessage()); } @@ -351,18 +354,14 @@ public abstract class AbstractCalendarWebScript extends DeclarativeWebScript } if(siteName == null && json != null) { - try + if(json.containsKey("siteid")) { - if(json.has("siteid")) - { - siteName = json.getString("siteid"); - } - else if(json.has("site")) - { - siteName = json.getString("site"); - } + siteName = (String)json.get("siteid"); + } + else if(json.containsKey("site")) + { + siteName = (String)json.get("site"); } - catch(JSONException e) {} } if(siteName == null) { diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntriesListGet.java b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntriesListGet.java index 856d2a00e6..2a12c452f9 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntriesListGet.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntriesListGet.java @@ -32,7 +32,7 @@ import org.alfresco.repo.calendar.CalendarModel; import org.alfresco.service.cmr.calendar.CalendarEntry; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryDelete.java b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryDelete.java index cc853057b6..c34aeef3b2 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryDelete.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryDelete.java @@ -22,7 +22,7 @@ import java.util.Map; import org.alfresco.service.cmr.calendar.CalendarEntry; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryGet.java b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryGet.java index f552ba202a..e73a3b9a01 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryGet.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryGet.java @@ -29,7 +29,7 @@ import org.alfresco.service.cmr.calendar.CalendarRecurrenceHelper; import org.alfresco.service.cmr.site.SiteInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryPost.java b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryPost.java index bee930b177..21df927ce3 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryPost.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryPost.java @@ -26,7 +26,7 @@ import org.alfresco.service.cmr.calendar.CalendarEntry; import org.alfresco.service.cmr.calendar.CalendarEntryDTO; import org.alfresco.service.cmr.site.SiteInfo; import org.json.JSONException; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; @@ -59,9 +59,9 @@ public class CalendarEntryPost extends AbstractCalendarWebScript isAllDay = extractDates(entry, json); // Handle tags - if(json.has("tags")) + if(json.containsKey("tags")) { - StringTokenizer st = new StringTokenizer(json.getString("tags"), " "); + StringTokenizer st = new StringTokenizer((String)json.get("tags"), " "); while(st.hasMoreTokens()) { entry.getTags().add(st.nextToken()); diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryPut.java b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryPut.java index 59a720c49d..649225e746 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryPut.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryPut.java @@ -26,7 +26,7 @@ import org.alfresco.service.cmr.calendar.CalendarEntry; import org.alfresco.service.cmr.calendar.CalendarEntryDTO; import org.alfresco.service.cmr.site.SiteInfo; import org.json.JSONException; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; @@ -57,10 +57,10 @@ public class CalendarEntryPut extends AbstractCalendarWebScript try { // Doc folder is a bit special - String docFolder = json.getString("docfolder"); + String docFolder = (String)json.get("docfolder"); // Editing recurring events is special and a little bit odd... - if(entry.getRecurrenceRule() != null && !json.has("recurrenceRule")) + if(entry.getRecurrenceRule() != null && !json.containsKey("recurrenceRule")) { // Have an ignored event generated // Will allow us to override this one instance @@ -99,37 +99,37 @@ public class CalendarEntryPut extends AbstractCalendarWebScript isAllDay = extractDates(entry, json); // Recurring properties, only changed if keys present - if (json.has("recurrenceRule")) + if (json.containsKey("recurrenceRule")) { - if (json.isNull("recurrenceRule")) + if (json.get("recurrenceRule") == null) { entry.setRecurrenceRule(null); } else { - entry.setRecurrenceRule(json.getString("recurrenceRule")); + entry.setRecurrenceRule((String)json.get("recurrenceRule")); } } - if (json.has("recurrenceLastMeeting")) + if (json.containsKey("recurrenceLastMeeting")) { - if (json.isNull("recurrenceLastMeeting")) + if (json.get("recurrenceLastMeeting") == null) { entry.setLastRecurrence(null); } else { entry.setLastRecurrence( - parseDate(json.getString("recurrenceLastMeeting")) + parseDate((String)json.get("recurrenceLastMeeting")) ); } } // Handle tags - if(json.has("tags")) + if(json.containsKey("tags")) { entry.getTags().clear(); - StringTokenizer st = new StringTokenizer(json.getString("tags"), " "); + StringTokenizer st = new StringTokenizer((String)json.get("tags"), " "); while(st.hasMoreTokens()) { entry.getTags().add(st.nextToken()); diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/UserCalendarEntriesGet.java b/source/java/org/alfresco/repo/web/scripts/calendar/UserCalendarEntriesGet.java index 1366f3ff76..859442fa32 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/UserCalendarEntriesGet.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/UserCalendarEntriesGet.java @@ -37,7 +37,7 @@ import org.alfresco.service.cmr.calendar.CalendarEntryDTO; import org.alfresco.service.cmr.calendar.CalendarRecurrenceHelper; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/AbstractDiscussionWebScript.java b/source/java/org/alfresco/repo/web/scripts/discussion/AbstractDiscussionWebScript.java index 16681530f5..b0b1a238ca 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/AbstractDiscussionWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/AbstractDiscussionWebScript.java @@ -45,10 +45,10 @@ import org.alfresco.service.cmr.site.SiteService; import org.alfresco.util.Pair; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONTokener; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; @@ -116,11 +116,11 @@ public abstract class AbstractDiscussionWebScript extends DeclarativeWebScript } - protected String getOrNull(JSONObject json, String key) throws JSONException + protected String getOrNull(JSONObject json, String key) { - if(json.has(key)) + if(json.containsKey(key)) { - return json.getString(key); + return (String)json.get(key); } return null; } @@ -165,16 +165,16 @@ public abstract class AbstractDiscussionWebScript extends DeclarativeWebScript return paging; } - protected List getTags(JSONObject json) throws JSONException + protected List getTags(JSONObject json) { List tags = null; - if(json.has("tags")) + if(json.containsKey("tags")) { // Is it "tags":"" or "tags":[...] ? if(json.get("tags") instanceof String) { // This is normally an empty string, skip - String tagsS = json.getString("tags"); + String tagsS = (String)json.get("tags"); if("".equals(tagsS)) { // No tags were given @@ -190,10 +190,10 @@ public abstract class AbstractDiscussionWebScript extends DeclarativeWebScript else { tags = new ArrayList(); - JSONArray jsTags = json.getJSONArray("tags"); - for(int i=0; i 0) { - String title = json.getString("title"); - post.setTitle(title); - if(title.length() > 0) - { - topic.setTitle(title); - } - } - - // Contents is on the post - if(json.has("content")) - { - post.setContents(json.getString("content")); - } - - // Tags are on the topic - if(json.has("tags")) - { - topic.getTags().clear(); - - List tags = getTags(json); - if(tags != null) - { - topic.getTags().addAll(tags); - } + topic.setTitle(title); } } - catch(JSONException e) + + // Contents is on the post + if(json.containsKey("content")) { - throw new WebScriptException("Invalid JSON: " + e.getMessage()); + post.setContents((String)json.get("content")); + } + + // Tags are on the topic + if(json.containsKey("tags")) + { + topic.getTags().clear(); + + List tags = getTags(json); + if(tags != null) + { + topic.getTags().addAll(tags); + } } // Save the topic and the post diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/ForumPostRepliesGet.java b/source/java/org/alfresco/repo/web/scripts/discussion/ForumPostRepliesGet.java index 1854a88d0a..bd5e54d626 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/ForumPostRepliesGet.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/ForumPostRepliesGet.java @@ -19,7 +19,6 @@ package org.alfresco.repo.web.scripts.discussion; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -28,7 +27,7 @@ import org.alfresco.service.cmr.discussion.PostWithReplies; import org.alfresco.service.cmr.discussion.TopicInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/ForumPostRepliesPost.java b/source/java/org/alfresco/repo/web/scripts/discussion/ForumPostRepliesPost.java index 28f1ecb760..93123fd415 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/ForumPostRepliesPost.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/ForumPostRepliesPost.java @@ -25,8 +25,7 @@ import org.alfresco.service.cmr.discussion.PostInfo; import org.alfresco.service.cmr.discussion.TopicInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONException; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; @@ -83,25 +82,17 @@ public class ForumPostRepliesPost extends AbstractDiscussionWebScript { // Fetch the details from the JSON String title = null; - String contents = null; + if(json.containsKey("title")) + { + title = (String)json.get("title"); + } - try + String contents = null; + if(json.containsKey("content")) { - // Grab the data - if(json.has("title")) - { - title = json.getString("title"); - } - if(json.has("content")) - { - contents = json.getString("content"); - } + contents = (String)json.get("content"); + } - } - catch(JSONException e) - { - throw new WebScriptException("Invalid JSON: " + e.getMessage()); - } // Create the reply PostInfo reply = discussionService.createReply(post, contents); diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicPost.java b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicPost.java index 10ae8b5891..a40bb8aff1 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicPost.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicPost.java @@ -18,7 +18,6 @@ */ package org.alfresco.repo.web.scripts.discussion; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -26,9 +25,7 @@ import org.alfresco.service.cmr.discussion.PostInfo; import org.alfresco.service.cmr.discussion.TopicInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; @@ -58,23 +55,15 @@ public class ForumTopicPost extends AbstractDiscussionWebScript // Grab the details of the new Topic and Post String title = ""; String contents = ""; - List tags = null; - try + if(json.containsKey("title")) { - if(json.has("title")) - { - title = json.getString("title"); - } - if(json.has("content")) - { - contents = json.getString("content"); - } - tags = getTags(json); + title = (String)json.get("title"); } - catch(JSONException e) + if(json.containsKey("content")) { - throw new WebScriptException("Invalid JSON: " + e.getMessage()); + contents = (String)json.get("content"); } + List tags = getTags(json); // Have the topic created diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsGet.java b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsGet.java index 2bb8ffaf4b..2f6eb0db26 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsGet.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsGet.java @@ -26,7 +26,7 @@ import org.alfresco.service.cmr.discussion.PostInfo; import org.alfresco.service.cmr.discussion.TopicInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsHotGet.java b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsHotGet.java index e97263330f..49c7b41285 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsHotGet.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsHotGet.java @@ -30,7 +30,7 @@ import org.alfresco.service.cmr.discussion.TopicInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.util.Pair; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsMineGet.java b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsMineGet.java index 9aa6a142f5..f4ba693e48 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsMineGet.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsMineGet.java @@ -27,7 +27,7 @@ import org.alfresco.service.cmr.discussion.PostInfo; import org.alfresco.service.cmr.discussion.TopicInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsRecentGet.java b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsRecentGet.java index 3433278cac..d2ed946e91 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsRecentGet.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/ForumTopicsRecentGet.java @@ -27,7 +27,7 @@ import org.alfresco.service.cmr.discussion.PostInfo; import org.alfresco.service.cmr.discussion.TopicInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; diff --git a/source/java/org/alfresco/repo/web/scripts/links/AbstractLinksWebScript.java b/source/java/org/alfresco/repo/web/scripts/links/AbstractLinksWebScript.java index d63342fbc5..57f95080f8 100644 --- a/source/java/org/alfresco/repo/web/scripts/links/AbstractLinksWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/links/AbstractLinksWebScript.java @@ -19,6 +19,7 @@ package org.alfresco.repo.web.scripts.links; import java.io.IOException; +import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -36,15 +37,16 @@ import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONTokener; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; +import org.springframework.extensions.webscripts.json.JSONWriter; /** * @author Nick Burch @@ -92,25 +94,25 @@ public abstract class AbstractLinksWebScript extends DeclarativeWebScript } - protected String getOrNull(JSONObject json, String key) throws JSONException + protected String getOrNull(JSONObject json, String key) { - if(json.has(key)) + if(json.containsKey(key)) { - return json.getString(key); + return (String)json.get(key); } return null; } - protected List getTags(JSONObject json) throws JSONException + protected List getTags(JSONObject json) { List tags = null; - if(json.has("tags")) + if(json.containsKey("tags")) { // Is it "tags":"" or "tags":[...] ? if(json.get("tags") instanceof String) { // This is normally an empty string, skip - String tagsS = json.getString("tags"); + String tagsS = (String)json.get("tags"); if("".equals(tagsS)) { // No tags were given @@ -127,10 +129,10 @@ public abstract class AbstractLinksWebScript extends DeclarativeWebScript else { tags = new ArrayList(); - JSONArray jsTags = json.getJSONArray("tags"); - for(int i=0; i tags = getTags(json); - if(tags != null && tags.size() > 0) - { - link.getTags().addAll(tags); - } + link.setInternal(true); } - catch(JSONException je) + else { - throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Invalid JSON: " + je.getMessage()); + link.setInternal(false); + } + + // Do the tags + link.getTags().clear(); + List tags = getTags(json); + if(tags != null && tags.size() > 0) + { + link.getTags().addAll(tags); } diff --git a/source/java/org/alfresco/repo/web/scripts/links/LinksDeletePost.java b/source/java/org/alfresco/repo/web/scripts/links/LinksDeletePost.java index 25a2e8f198..ba526bc3ae 100644 --- a/source/java/org/alfresco/repo/web/scripts/links/LinksDeletePost.java +++ b/source/java/org/alfresco/repo/web/scripts/links/LinksDeletePost.java @@ -26,12 +26,10 @@ import java.util.Map; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.service.cmr.links.LinkInfo; import org.alfresco.service.cmr.site.SiteInfo; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; -import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; /** @@ -53,26 +51,19 @@ public class LinksDeletePost extends AbstractLinksWebScript // Get the requested nodes from the JSON // Silently skips over any invalid ones specified List links = new ArrayList(); - try + if(json.containsKey("items")) { - if(json.has("items")) + JSONArray items = (JSONArray)json.get("items"); + for(int i=0; i tags; - try - { - // Fetch the main properties - title = getOrNull(json, "title"); - description = getOrNull(json, "description"); - url = getOrNull(json, "url"); - - // Handle internal / not internal - internal = json.has("internal"); - - // Do the tags - tags = getTags(json); - } - catch(JSONException je) - { - throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Invalid JSON: " + je.getMessage()); - } + + // Fetch the main properties + title = getOrNull(json, "title"); + description = getOrNull(json, "description"); + url = getOrNull(json, "url"); + + // Handle internal / not internal + internal = json.containsKey("internal"); + + // Do the tags + tags = getTags(json); // Create the link diff --git a/source/java/org/alfresco/repo/web/scripts/wiki/AbstractWikiWebScript.java b/source/java/org/alfresco/repo/web/scripts/wiki/AbstractWikiWebScript.java index 39ce4b74c8..7d441df482 100644 --- a/source/java/org/alfresco/repo/web/scripts/wiki/AbstractWikiWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/wiki/AbstractWikiWebScript.java @@ -19,6 +19,7 @@ package org.alfresco.repo.web.scripts.wiki; import java.io.IOException; +import java.io.StringWriter; import java.util.HashMap; import java.util.Map; @@ -34,14 +35,15 @@ import org.alfresco.service.cmr.wiki.WikiPageInfo; import org.alfresco.service.cmr.wiki.WikiService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONTokener; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; +import org.springframework.extensions.webscripts.json.JSONWriter; /** * @author Nick Burch @@ -91,11 +93,11 @@ public abstract class AbstractWikiWebScript extends DeclarativeWebScript } - protected String getOrNull(JSONObject json, String key) throws JSONException + protected String getOrNull(JSONObject json, String key) { - if(json.has(key)) + if(json.containsKey(key)) { - return json.getString(key); + return (String)json.get(key); } return null; } @@ -150,13 +152,9 @@ public abstract class AbstractWikiWebScript extends DeclarativeWebScript String page = req.getParameter("page"); if(page == null && json != null) { - if(json.has("page")) + if(json.containsKey("page")) { - try - { - page = json.getString("page"); - } - catch(JSONException e) {} + page = (String)json.get("page"); } } if(page == null) @@ -167,15 +165,18 @@ public abstract class AbstractWikiWebScript extends DeclarativeWebScript try { - JSONObject activity = new JSONObject(); - activity.put("title", wikiPage.getTitle()); - activity.put("page", page + "?title=" + wikiPage.getSystemName()); + StringWriter activityJson = new StringWriter(); + JSONWriter activity = new JSONWriter(activityJson); + activity.startObject(); + activity.writeValue("title", wikiPage.getTitle()); + activity.writeValue("page", page + "?title=" + wikiPage.getSystemName()); + activity.endObject(); activityService.postActivity( "org.alfresco.wiki.page-" + event, site.getShortName(), WIKI_SERVICE_ACTIVITY_APP_NAME, - activity.toString() + activityJson.toString() ); } catch(Exception e) @@ -251,17 +252,18 @@ public abstract class AbstractWikiWebScript extends DeclarativeWebScript } if(MimetypeMap.MIMETYPE_JSON.equals(contentType)) { + JSONParser parser = new JSONParser(); try { - json = new JSONObject(new JSONTokener(req.getContent().getContent())); + json = (JSONObject)parser.parse(req.getContent().getContent()); } catch(IOException io) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Invalid JSON: " + io.getMessage()); } - catch(JSONException je) + catch(ParseException pe) { - throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Invalid JSON: " + je.getMessage()); + throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Invalid JSON: " + pe.getMessage()); } } @@ -274,22 +276,18 @@ public abstract class AbstractWikiWebScript extends DeclarativeWebScript } if(siteName == null && json != null) { - try + if(json.containsKey("siteid")) { - if(json.has("siteid")) - { - siteName = json.getString("siteid"); - } - else if(json.has("siteId")) - { - siteName = json.getString("siteId"); - } - else if(json.has("site")) - { - siteName = json.getString("site"); - } + siteName = (String)json.get("siteid"); + } + else if(json.containsKey("siteId")) + { + siteName = (String)json.get("siteId"); + } + else if(json.containsKey("site")) + { + siteName = (String)json.get("site"); } - catch(JSONException e) {} } if(siteName == null) { diff --git a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageDelete.java b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageDelete.java index bffd2fb521..aa90b43559 100644 --- a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageDelete.java +++ b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageDelete.java @@ -23,7 +23,7 @@ import java.util.Map; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.wiki.WikiPageInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; diff --git a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageGet.java b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageGet.java index 8aa5dc4e69..275a005c67 100644 --- a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageGet.java +++ b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageGet.java @@ -31,7 +31,7 @@ import org.alfresco.repo.wiki.WikiServiceImpl; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.wiki.WikiPageInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; diff --git a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageListGet.java b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageListGet.java index 99ff9852e1..d2230a17b9 100644 --- a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageListGet.java +++ b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageListGet.java @@ -31,7 +31,7 @@ import org.alfresco.repo.wiki.WikiServiceImpl; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.wiki.WikiPageInfo; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; diff --git a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageMovePost.java b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageMovePost.java index 6d3e82714b..58b76257c6 100644 --- a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageMovePost.java +++ b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageMovePost.java @@ -26,7 +26,7 @@ import org.alfresco.service.cmr.model.FileExistsException; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.wiki.WikiPageInfo; import org.json.JSONException; -import org.json.JSONObject; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; @@ -69,16 +69,8 @@ public class WikiPageMovePost extends AbstractWikiWebScript // Grab the new Title - String newTitle; - try - { - // The "name" in the JSON is actually the title! - newTitle = json.getString("name"); - } - catch(JSONException e) - { - throw new WebScriptException("Invalid JSON: " + e.getMessage()); - } + // The "name" in the JSON is actually the title! + String newTitle = (String)json.get("name"); // Have the page re-named, if possible diff --git a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPagePut.java b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPagePut.java index bf79cb0626..258a0a3266 100644 --- a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPagePut.java +++ b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPagePut.java @@ -30,9 +30,8 @@ import org.alfresco.service.cmr.version.Version; import org.alfresco.service.cmr.version.VersionService; import org.alfresco.service.cmr.wiki.WikiPageInfo; import org.alfresco.service.namespace.QName; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; @@ -60,56 +59,47 @@ public class WikiPagePut extends AbstractWikiWebScript Map model = new HashMap(); // Grab the details of the change - List tags = null; - String currentVersion = null; - boolean forceSave; - String contents; + // Fetch the contents + String contents = (String)json.get("pagecontent"); + + // Fetch the title, used only when creating String title; - try + if(json.containsKey("title")) { - // Fetch the contents - contents = json.getString("pagecontent"); - - // Fetch the title, used only when creating - if(json.has("title")) + title = (String)json.get("title"); + } + else + { + title = pageName; + } + + // Fetch the versioning details + boolean forceSave = json.containsKey("forceSave"); + String currentVersion = null; + if(json.containsKey("currentVersion")) + { + currentVersion = (String)json.get("currentVersion"); + } + + // Fetch the tags, if given + List tags = null; + if(json.containsKey("tags")) + { + tags = new ArrayList(); + if(json.get("tags").equals("")) { - title = json.getString("title"); + // Empty list given as a string, eg "tags":"" } else { - title = pageName; - } - - // Fetch the versioning details - forceSave = json.has("forceSave"); - if(json.has("currentVersion")) - { - currentVersion = json.getString("currentVersion"); - } - - // Fetch the tags, if given - if(json.has("tags")) - { - tags = new ArrayList(); - if(json.get("tags").equals("")) + // Array of tags + JSONArray tagsA = (JSONArray)json.get("tags"); + for(int i=0; i