package sync;
import org.json.JSONArray;
import org.json.JSONObject;
import sync.JamSyncGroupMemberManager;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import java.io.ByteArrayInputStream;
import utils.JamConfig;
import utils.JamNetworkManager;
import utils.JamNetworkParam;
import utils.JamTokenManager;
import java.io.InputStream;
import java.net.MalformedURLException;
public class JamSyncGroupQIDs extends JamSyncInterface {
// GET ODATA API CALLS
static String API_ODATA_GET_GROUP_FORUMS_URL = "/api/v1/OData/Groups('%1$s')/Forums?$expand=Creator&$select=Name,Type,Id,Creator";
static String API_ODATA_GET_GROUP_ALL_QUESTIONS_URL = "/api/v1/OData/Groups('%1$s')/AllQuestions?$expand=Answers,BestAnswer,Creator,Forum,BestAnswer/Creator&$select=Answers,BestAnswer,Creator/Email,Id,Name,Content,HasBestAnswer,AnswersCount,Liked,Forum/Id,Liked";
static String API_ODATA_GET_GROUP_ALL_IDEAS_URL = "/api/v1/OData/Groups('%1$s')/AllIdeas?$expand=Creator,Forum,Posts&$select=Name,Id,Creator,Forum,Content,Status";
static String API_ODATA_GET_GROUP_ALL_DISCUSSIONS_URL = "/api/v1/OData/Groups('%1$s')/AllDiscussions?$expand=Creator,Forum,Comments&$select=Name,Id,Creator,Content,Liked,Forum,CommentsCount";
static String API_ODATA_GET_FORUM_QUESTION_ANSWER_URL = "/api/v1/OData/Questions('%1$s')/Answers?$expand=Comments,Creator";
static String API_ODATA_GET_WALL_COMMENTS_URL = "/api/v1/OData/WallComments('%1$s')/Comments?$expand=Creator&$select=Id,Creator,Liked,Text";
static String API_ODATA_GET_DISCUSSIONS_COMMENTS_URL = "/api/v1/OData/Discussions('%1$s')/Comments?$expand=Creator&$select=Id,Creator,Liked,Text";
// POST ODATA API CALLS
static String API_ODATA_POST_GROUP_FORUMS_URL = "/api/v1/OData/Groups('%1$s')/Forums";
static String API_ODATA_POST_GROUP_FORUMS_QUESTIONS_URL ="/api/v1/OData/Forums('%1$s')/Questions";
static String API_ODATA_POST_GROUP_FORUMS_IDEAS_URL = "/api/v1/OData/Forums('%1$s')/Ideas";
static String API_ODATA_POST_GROUP_FORUMS_DISCUSSIONS_URL = "/api/v1/OData/Forums('%1$s')/Discussions";
static String API_ODATA_POST_FORUM_QUESTION_ANSWER_URL = "/api/v1/OData/Questions('%1$s')/Answers";
static String API_ODATA_POST_WALL_COMMENTS_URL = "/api/v1/OData/WallComments('%1$s')/Comments";
static String API_ODATA_POST_QUESTION_BEST_ANSWER_URL = "/api/v1/OData/Questions('%1$s')/$links/BestAnswer";
static String API_ODATA_POST_DISCUSSIONS_COMMENTS_URL = "/api/v1/OData/Discussions('%1$s')/Comments";
static String API_ODATA_PATCH_GROUP_FORUMS_IDEAS_INFO_URL = "/api/v1/OData/Ideas('%1$s')";
static String API_ODATA_PATCH_COMMENTS_LIKED_URL = "/api/v1/OData/Comments('%1$s')";
static String API_ODATA_PATCH_DISCUSSIONS_LIKED_URL ="/api/v1/OData/Discussions('%1$s')";
static String API_ODATA_PATCH_QUESTIONS_LIKED_URL ="/api/v1/OData/Questions('%1$s')";
static String API_ODATA_PATCH_WALL_COMMENTS_LIKED_URL ="/api/v1/OData/WallComments('%1$s')";
static class Forum {
public String fromUUID=null;
public String toUUID=null;
public String name;
public String type;
public String creatorEmail;
}
static class Answer {
public String fromUUID;
public String toUUID;
public String comment;
public boolean liked;
}
HashMap<String, Forum> forumsMap = new HashMap<String, Forum>();
HashMap<String, Answer> answersMap = new HashMap<String, Answer>();
public JamSyncGroupQIDs() {
}
private Forum findForumByName(String name) {
for (Map.Entry<String, Forum> entry : forumsMap.entrySet()) {
Forum forum = (Forum)(entry.getValue());
if(forum.name.equals(name)) {
return forum;
}
}
return null;
}
public void syncLikes( String uploadLikedUrl, boolean liked) throws MalformedURLException {
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING Likes!!
//////////////////////////////////////////////////////////////////////////////
JamNetworkParam likesParamHeader = new JamNetworkParam();
likesParamHeader.add("Content-Type", "application/json");
JSONObject likesParamBody = new JSONObject();
likesParamBody.put("Liked", liked);
final InputStream likedInputStream = new ByteArrayInputStream(likesParamBody.toString().getBytes());
JamNetworkManager.getInstance().PatchRequest(uploadLikedUrl, likesParamHeader, likedInputStream);
}
private void syncAllForumInfo(JamSyncGroupMemberManager.Group group) throws Exception {
final JamConfig.ConfigInfo toConfig = JamConfig.getInstance().getToConfig();
final JamConfig.ConfigInfo fromConfig = JamConfig.getInstance().getFromConfig();
//////////////////////////////////////////////////////////////////////////////
// [SOURCE] DOWNLOAD all forums
//////////////////////////////////////////////////////////////////////////////
System.out.println(" [SOURCE] Getting forums for group: " + group.fromUUID);
JamTokenManager.getInstance().setTokenFromConfig(fromConfig, group.creatorEmail); // FROM GROUP CREATOR
String forumsUrl = fromConfig.host + String.format(API_ODATA_GET_GROUP_FORUMS_URL, group.fromUUID);
JSONObject forumsJSON = JamNetworkManager.getInstance().GetRequest(forumsUrl, new JamNetworkParam()).getJSONObject("d");
JSONArray forumsListJson = forumsJSON.getJSONArray("results");
List<JSONObject> forums = new ArrayList<JSONObject>();
while (forumsListJson !=null && forumsListJson.length() > 0) {
System.out.println(" Found ideas: " + forumsListJson.length());
for (int i = 0; i <forumsListJson.length(); ++i) {
forums.add(forumsListJson.getJSONObject(i));
}
// If here are more pages, continue to request for next page
if (forumsJSON.has("__next")) {
final String toNextPageUrl = forumsJSON.getString("__next");
String url = fromConfig.host + "/api/v1/OData/" + toNextPageUrl;
forumsJSON = JamNetworkManager.getInstance().GetRequest(url, new JamNetworkParam()).getJSONObject("d");
forumsListJson = forumsJSON.getJSONArray("results");
} else {
forumsListJson = null;
}
}
for (int i = 0; i < forums.size(); ++i) {
final JSONObject fromForumJson = forums.get(i);
final Forum forum = new Forum();
forum.fromUUID = fromForumJson.getString("Id");
forum.name = fromForumJson.getString("Name");
forum.type = fromForumJson.getString("Type");
forum.creatorEmail = fromForumJson.getJSONObject("Creator").getString("Email");
System.out.println(" [SOURCE] Getting group forum: name:" + forum.name + " type:"+forum.type + " creator" + forum.creatorEmail);
forumsMap.put(forum.fromUUID,forum);
}
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] Check to see if Forums exist, if so, use them for uploading
//////////////////////////////////////////////////////////////////////////////
String toForumsUrl = toConfig.host + String.format(API_ODATA_GET_GROUP_FORUMS_URL, group.toUUID);
JamTokenManager.getInstance().setTokenFromConfig(toConfig, group.creatorEmail); // FROM GROUP CREATOR
final JSONObject toForumsJSON = JamNetworkManager.getInstance().GetRequest(toForumsUrl, new JamNetworkParam());
final JSONArray toForumsListJson = ((JSONObject)toForumsJSON.get("d")).getJSONArray("results");
for (int i = 0; i < toForumsListJson.length(); ++i) {
final JSONObject toForumJson = toForumsListJson.getJSONObject(i);
System.out.println(" [DESTINATION] Found :" + toForumJson.getString("Name"));
Forum existForum = findForumByName(toForumJson.getString("Name"));
if(existForum != null) {
existForum.toUUID = toForumJson.getString("Id");
System.out.println(" [SOURCE] Added ID for group forum: name:" + existForum.name + " type:"+existForum.type + " creator" + existForum.creatorEmail + " touuid:" + existForum.toUUID);
}
}
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOAD - For forums that doesn't exist yet, upload / create them
//////////////////////////////////////////////////////////////////////////////
String toForumsPostUrl = toConfig.host + String.format(API_ODATA_POST_GROUP_FORUMS_URL, group.toUUID);
for (Map.Entry<String, Forum> entry : forumsMap.entrySet()) {
String key = entry.getKey();
Forum forum = (Forum)(entry.getValue());
if(forum.toUUID == null) {
JamTokenManager.getInstance().setTokenFromConfig(toConfig, forum.creatorEmail);
JSONObject paramBody = new JSONObject();
paramBody.put("Name", forum.name);
paramBody.put("Type", forum.type);
System.out.println(" [SOURCE] group forum name: " + forum.name + " type:" + forum.type);
JamNetworkParam paramHeader = new JamNetworkParam();
paramHeader.add("Content-Type", "application/json");
final InputStream inputStream = new ByteArrayInputStream(paramBody.toString().getBytes());
JSONObject forumJSON = JamNetworkManager.getInstance().PostRequest(toForumsPostUrl, paramHeader, inputStream);
JSONObject toForumJson = forumJSON.getJSONObject("d").getJSONObject("results");
forum.toUUID = toForumJson.getString("Id");
}
}
}
private void syncComments(JamSyncGroupMemberManager.Group group, String creatorEmail, String getCommentsUrl, String postCommentsUrl) throws Exception {
final JamConfig.ConfigInfo toConfig = JamConfig.getInstance().getToConfig();
final JamConfig.ConfigInfo fromConfig = JamConfig.getInstance().getFromConfig();
//////////////////////////////////////////////////////////////////////////////
// [SOURCE] DOWNLOADING Comments
//////////////////////////////////////////////////////////////////////////////
JamTokenManager.getInstance().setTokenFromConfig(fromConfig, creatorEmail); // FROM GROUP CREATOR
final JSONObject fromCommentsJSON = JamNetworkManager.getInstance().GetRequest(getCommentsUrl, new JamNetworkParam());
final JSONArray fromCommentsListJson = ((JSONObject)fromCommentsJSON.get("d")).getJSONArray("results");
System.out.println(" [SYNC] Syncing comments("+ fromCommentsListJson.length()+ ") from:" + getCommentsUrl + " to: " + postCommentsUrl);
for (int r = 0; r < fromCommentsListJson.length(); r++) {
final JSONObject fromCommentJson = fromCommentsListJson.getJSONObject(r);
System.out.println(" [SYNC] Syncing comment : " + fromCommentJson.getString("Text"));
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING Comments
//////////////////////////////////////////////////////////////////////////////
String commenterEmail = fromCommentJson.getJSONObject("Creator").getString("Email");
JamTokenManager.getInstance().setTokenFromConfig(toConfig, commenterEmail);
JSONObject paramBody = new JSONObject();
paramBody.put("Text", fromCommentJson.getString("Text"));
JamNetworkParam paramHeader = new JamNetworkParam();
paramHeader.add("Content-Type", "application/json");
final InputStream commentInputStream = new ByteArrayInputStream(paramBody.toString().getBytes());
JSONObject toCommentJSON = JamNetworkManager.getInstance().PostRequest(postCommentsUrl, paramHeader, commentInputStream);
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING Liked
//////////////////////////////////////////////////////////////////////////////
String toCommentUUID = toCommentJSON.getJSONObject("d").getJSONObject("results").getString("Id");
System.out.println(" [SYNC] Syncing comments txt:"+ fromCommentJson.getString("Text") + " => liked:" + fromCommentJson.getBoolean("Liked"));
syncLikes( toConfig.host + String.format(API_ODATA_PATCH_COMMENTS_LIKED_URL, toCommentUUID), fromCommentJson.getBoolean("Liked"));
}
}
private void syncAllQuestions(JamSyncGroupMemberManager.Group group) throws Exception {
final JamConfig.ConfigInfo toConfig = JamConfig.getInstance().getToConfig();
final JamConfig.ConfigInfo fromConfig = JamConfig.getInstance().getFromConfig();
//////////////////////////////////////////////////////////////////////////////
// [SOURCE] DOWNLOAD all questions
//////////////////////////////////////////////////////////////////////////////
System.out.println(" [SOURCE] Getting AllQuestions for group: " + group.fromUUID);
JamTokenManager.getInstance().setTokenFromConfig(fromConfig, group.creatorEmail); // FROM GROUP CREATOR
String forumsUrl = fromConfig.host + String.format(API_ODATA_GET_GROUP_ALL_QUESTIONS_URL, group.fromUUID);
JSONObject fromQuestionsJSON = JamNetworkManager.getInstance().GetRequest(forumsUrl, new JamNetworkParam()).getJSONObject("d");
JSONArray fromQuestionsListJson = fromQuestionsJSON.getJSONArray("results");
List<JSONObject> questions = new ArrayList<JSONObject>();
while (fromQuestionsListJson !=null && fromQuestionsListJson.length() > 0) {
System.out.println(" Found questions: " + fromQuestionsListJson.length());
for (int i = 0; i <fromQuestionsListJson.length(); ++i) {
questions.add(fromQuestionsListJson.getJSONObject(i));
}
// If here are more pages, continue to request for next page
if (fromQuestionsJSON.has("__next")) {
final String toNextPageUrl = fromQuestionsJSON.getString("__next");
String url = fromConfig.host + "/api/v1/OData/" + toNextPageUrl;
fromQuestionsJSON = JamNetworkManager.getInstance().GetRequest(url, new JamNetworkParam()).getJSONObject("d");
fromQuestionsListJson = fromQuestionsJSON.getJSONArray("results");
} else {
fromQuestionsListJson = null;
}
}
for (int i = questions.size()-1; i >= 0; --i) {
final JSONObject questionJson = questions.get(i);
// Get Questions
String name = questionJson.getString("Name");
String fromQuestionUUID = questionJson.getString("Id");
int answerCount = questionJson.getInt("AnswersCount");
String content = questionJson.getString("Content");
String creatorEmail = questionJson.getJSONObject("Creator").getString("Email");
String fromForumUUID = questionJson.getJSONObject("Forum").getString("Id");
JSONArray answers = questionJson.getJSONObject("Answers").getJSONArray("results");
boolean liked = questionJson.getBoolean("Liked");
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING A QUESTION
//////////////////////////////////////////////////////////////////////////////
String postToQuestionUrl = toConfig.host + String.format(API_ODATA_POST_GROUP_FORUMS_QUESTIONS_URL, forumsMap.get(fromForumUUID).toUUID);
JamTokenManager.getInstance().setTokenFromConfig(toConfig, creatorEmail); // FROM GROUP CREATOR
JSONObject paramBody = new JSONObject();
paramBody.put("Name", name);
paramBody.put("Content", content);
JamNetworkParam paramHeader = new JamNetworkParam();
paramHeader.add("Content-Type", "application/json");
final InputStream inputStream = new ByteArrayInputStream(paramBody.toString().getBytes());
JSONObject forumJSON = JamNetworkManager.getInstance().PostRequest(postToQuestionUrl, paramHeader, inputStream);
JSONObject toForumJson = forumJSON.getJSONObject("d").getJSONObject("results");
String toQuestionUUID = toForumJson.getString("Id");
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING liked
//////////////////////////////////////////////////////////////////////////////
syncLikes(toConfig.host + String.format(API_ODATA_PATCH_QUESTIONS_LIKED_URL, toQuestionUUID), liked);
// Get Answers
for (int a = answers.length()-1; a >=0; --a) {
final JSONObject fromAnswersJson = answers.getJSONObject(a);
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING AN ANSWER
//////////////////////////////////////////////////////////////////////////////
String postToAnswerUrl = toConfig.host + String.format(API_ODATA_POST_FORUM_QUESTION_ANSWER_URL, toQuestionUUID);
JamTokenManager.getInstance().setTokenFromConfig(toConfig, creatorEmail); // FROM GROUP CREATOR
JSONObject answerParamBody = new JSONObject();
answerParamBody.put("Comment", fromAnswersJson.getString("Comment"));
answerParamBody.put("Liked", fromAnswersJson.getBoolean("Liked"));
JamNetworkParam answerParamHeader = new JamNetworkParam();
answerParamHeader.add("Content-Type", "application/json");
final InputStream answerInputStream = new ByteArrayInputStream(answerParamBody.toString().getBytes());
JSONObject answerJSON = JamNetworkManager.getInstance().PostRequest(postToAnswerUrl, answerParamHeader, answerInputStream);
JSONObject toAnswerJson = answerJSON.getJSONObject("d").getJSONObject("results");
Answer answerObj = new Answer();
answerObj.fromUUID = fromAnswersJson.getString("Id");
answerObj.comment = fromAnswersJson.getString("Comment");
answerObj.liked = fromAnswersJson.getBoolean("Liked");
answerObj.toUUID = toAnswerJson.getString("Id");
answersMap.put(answerObj.fromUUID, answerObj);
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING Liked
//////////////////////////////////////////////////////////////////////////////
System.out.println(" [SOURCE] uploading Wall comment / Answer ("+answerObj.comment+") liked: " + answerObj.liked);
syncLikes( toConfig.host + String.format(API_ODATA_PATCH_WALL_COMMENTS_LIKED_URL, answerObj.toUUID), answerObj.liked);
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING Replies
//////////////////////////////////////////////////////////////////////////////
String fromComments = fromConfig.host + String.format(API_ODATA_GET_WALL_COMMENTS_URL, answerObj.fromUUID );
String postComments = toConfig.host + String.format(API_ODATA_POST_WALL_COMMENTS_URL, answerObj.toUUID );
System.out.println(" [SOURCE] Getting Comments for Answers: " + answerObj.comment);
syncComments(group, creatorEmail, fromComments, postComments);
}
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOAD BEST ANSWERS
//////////////////////////////////////////////////////////////////////////////
if( questionJson.getBoolean("HasBestAnswer") == true) {
JSONObject bestAnswerJson = questionJson.getJSONObject("BestAnswer");
if(bestAnswerJson!=null) {
String toBestAnswers = toConfig.host + String.format(API_ODATA_POST_QUESTION_BEST_ANSWER_URL, toQuestionUUID );
JamTokenManager.getInstance().setTokenFromConfig(toConfig, bestAnswerJson.getJSONObject("Creator").getString("Email"));
JSONObject answerParamBody = new JSONObject();
String bestToAnswerUUID = answersMap.get(bestAnswerJson.getString("Id")).toUUID;
String link = "WallComments('"+bestToAnswerUUID+"')";
System.out.println(" [POST] BEST ANSWER WallComments uri link=> " + link );
answerParamBody.put("uri", link);
JamNetworkParam answerParamHeader = new JamNetworkParam();
answerParamHeader.add("Content-Type", "application/json");
final InputStream answerInputStream = new ByteArrayInputStream(answerParamBody.toString().getBytes());
JamNetworkManager.getInstance().PostRequest(toBestAnswers, answerParamHeader, answerInputStream);
}
}
}
}
private void syncAllIdeas(JamSyncGroupMemberManager.Group group) throws Exception {
final JamConfig.ConfigInfo toConfig = JamConfig.getInstance().getToConfig();
final JamConfig.ConfigInfo fromConfig = JamConfig.getInstance().getFromConfig();
//////////////////////////////////////////////////////////////////////////////
// [SOURCE] DOWNLOAD ALL IDEAS
//////////////////////////////////////////////////////////////////////////////
System.out.println(" [SOURCE] Getting AllIdeas for group: " + group.fromUUID);
JamTokenManager.getInstance().setTokenFromConfig(fromConfig, group.creatorEmail); // FROM GROUP CREATOR
String forumsUrl = fromConfig.host + String.format(API_ODATA_GET_GROUP_ALL_IDEAS_URL, group.fromUUID);
JSONObject fromIdeasJSON = JamNetworkManager.getInstance().GetRequest(forumsUrl, new JamNetworkParam()).getJSONObject("d");
JSONArray fromIdeasListJson = fromIdeasJSON.getJSONArray("results");
List<JSONObject> ideas = new ArrayList();
while (fromIdeasListJson !=null && fromIdeasListJson.length() > 0) {
System.out.println(" Found ideas: " + fromIdeasListJson.length());
for (int i = 0; i <fromIdeasListJson.length(); ++i) {
ideas.add(fromIdeasListJson.getJSONObject(i));
}
// If here are more pages, continue to request for next page
if (fromIdeasJSON.has("__next")) {
final String toNextPageUrl = fromIdeasJSON.getString("__next");
String url = fromConfig.host + "/api/v1/OData/" + toNextPageUrl;
fromIdeasJSON = JamNetworkManager.getInstance().GetRequest(url, new JamNetworkParam()).getJSONObject("d");
fromIdeasListJson = fromIdeasJSON.getJSONArray("results");
} else {
fromIdeasListJson = null;
}
}
for (int i = ideas.size()-1; i >=0; --i) {
final JSONObject ideaJson = ideas.get(i);
// Get Ideas
String name = ideaJson.getString("Name");
String uuid = ideaJson.getString("Id");
String creatorEmail = ideaJson.getJSONObject("Creator").getString("Email");
String fromForumUUID= ideaJson.getJSONObject("Forum").getString("Id");
String content = ideaJson.getString("Content");
String status = ideaJson.getString("Status");
String vote = "";
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING AN IDEA
//////////////////////////////////////////////////////////////////////////////
String postToIdeasUrl = toConfig.host + String.format(API_ODATA_POST_GROUP_FORUMS_IDEAS_URL, forumsMap.get(fromForumUUID).toUUID);
JamTokenManager.getInstance().setTokenFromConfig(toConfig, creatorEmail); // FROM GROUP CREATOR
JSONObject paramBody = new JSONObject();
paramBody.put("Name", name);
paramBody.put("Content", content);
paramBody.put("Status", status);
paramBody.put("Vote", vote);
System.out.println(" [SOURCE] Found Idea => name:"+name+" Status:" +status );
JamNetworkParam paramHeader = new JamNetworkParam();
paramHeader.add("Content-Type", "application/json");
final InputStream inputStream = new ByteArrayInputStream(paramBody.toString().getBytes());
JSONObject toIdeasJSON = JamNetworkManager.getInstance().PostRequest(postToIdeasUrl, paramHeader, inputStream);
JSONObject toForumJson = toIdeasJSON.getJSONObject("d").getJSONObject("results");
String toIdeaUUID = toForumJson.getString("Id");
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING AN IDEA STATUS
//////////////////////////////////////////////////////////////////////////////
String postToIdeasInfoUrl = toConfig.host + String.format(API_ODATA_PATCH_GROUP_FORUMS_IDEAS_INFO_URL, toIdeaUUID);
JamTokenManager.getInstance().setTokenFromConfig(toConfig, creatorEmail); // FROM GROUP CREATOR
JSONObject ideaInfoParamBody = new JSONObject();
ideaInfoParamBody.put("Status", status);
JamNetworkParam ideaInfoParamHeader = new JamNetworkParam();
ideaInfoParamHeader.add("Content-Type", "application/json");
final InputStream toIdeaInfoInputStream = new ByteArrayInputStream(ideaInfoParamBody.toString().getBytes());
JamNetworkManager.getInstance().PatchRequest(postToIdeasInfoUrl, paramHeader, toIdeaInfoInputStream);
}
}
private void syncAllDiscussions(JamSyncGroupMemberManager.Group group) throws Exception {
final JamConfig.ConfigInfo toConfig = JamConfig.getInstance().getToConfig();
final JamConfig.ConfigInfo fromConfig = JamConfig.getInstance().getFromConfig();
//////////////////////////////////////////////////////////////////////////////
// [SOURCE] DOWNLOAD all discussions
//////////////////////////////////////////////////////////////////////////////
System.out.println(" [SOURCE] Getting AllDiscussions for group: " + group.fromUUID);
JamTokenManager.getInstance().setTokenFromConfig(fromConfig, group.creatorEmail); // FROM GROUP CREATOR
String dicussionsUrl = fromConfig.host + String.format(API_ODATA_GET_GROUP_ALL_DISCUSSIONS_URL, group.fromUUID);
JSONObject fromdiscussionsJSON = JamNetworkManager.getInstance().GetRequest(dicussionsUrl, new JamNetworkParam()).getJSONObject("d");
JSONArray fromDiscussionsListJson = fromdiscussionsJSON.getJSONArray("results");
List<JSONObject> discussions = new ArrayList<JSONObject>();
while (fromDiscussionsListJson !=null && fromDiscussionsListJson.length() > 0) {
System.out.println(" Found ideas: " + fromDiscussionsListJson.length());
for (int i = 0; i <fromDiscussionsListJson.length(); ++i) {
discussions.add(fromDiscussionsListJson.getJSONObject(i));
}
// If here are more pages, continue to request for next page
if (fromdiscussionsJSON.has("__next")) {
final String toNextPageUrl = fromdiscussionsJSON.getString("__next");
String url = fromConfig.host + "/api/v1/OData/" + toNextPageUrl;
fromdiscussionsJSON = JamNetworkManager.getInstance().GetRequest(url, new JamNetworkParam()).getJSONObject("d");
fromDiscussionsListJson = fromdiscussionsJSON.getJSONArray("results");
} else {
fromDiscussionsListJson = null;
}
}
for (int i = discussions.size()-1; i >=0 ; --i) {
final JSONObject discussionJson = discussions.get(i);
// Get Discussions
String name = discussionJson.getString("Name");
String fromDiscussionUUID = discussionJson.getString("Id");
String creatorEmail = discussionJson.getJSONObject("Creator").getString("Email");
String fromForumUUID = discussionJson.getJSONObject("Forum").getString("Id");
String content = discussionJson.getString("Content");
int commentCount = discussionJson.getInt("CommentsCount");
boolean liked = discussionJson.getBoolean("Liked");
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING A QUESTION
//////////////////////////////////////////////////////////////////////////////
String postToIdeasUrl = toConfig.host + String.format(API_ODATA_POST_GROUP_FORUMS_DISCUSSIONS_URL, forumsMap.get(fromForumUUID).toUUID);
JamTokenManager.getInstance().setTokenFromConfig(toConfig, creatorEmail); // FROM GROUP CREATOR
JSONObject paramBody = new JSONObject();
paramBody.put("Name", name);
paramBody.put("Content", content);
paramBody.put("Liked",liked );
JamNetworkParam paramHeader = new JamNetworkParam();
paramHeader.add("Content-Type", "application/json");
final InputStream inputStream = new ByteArrayInputStream(paramBody.toString().getBytes());
JSONObject toDiscussionsJSON = JamNetworkManager.getInstance().PostRequest(postToIdeasUrl, paramHeader, inputStream);
JSONObject toForumJson = toDiscussionsJSON.getJSONObject("d").getJSONObject("results");
String toDiscussionUUID = toForumJson.getString("Id");
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING liked
//////////////////////////////////////////////////////////////////////////////
syncLikes(toConfig.host + String.format(API_ODATA_PATCH_DISCUSSIONS_LIKED_URL, toDiscussionUUID),liked);
//////////////////////////////////////////////////////////////////////////////
// [DESTINATION] UPLOADING comments
//////////////////////////////////////////////////////////////////////////////
String fromComments = fromConfig.host + String.format(API_ODATA_GET_DISCUSSIONS_COMMENTS_URL, fromDiscussionUUID);
String postComments = toConfig.host + String.format(API_ODATA_POST_DISCUSSIONS_COMMENTS_URL, toDiscussionUUID );
syncComments(group, creatorEmail, fromComments, postComments);
}
}
@Override
public void render() {
System.out.println("JamSyncGroupQIDs::Render!");
}
@Override
public void sync(String fromGroupUUID) {
System.out.println("\n ##################################################################################################################################################");
System.out.println(" JamSyncGroupQIDs::SYNC Begin!");
try {
final JamConfig.ConfigInfo fromConfig = JamConfig.getInstance().getFromConfig();
// For each group, get list of member and add them to cache
JamSyncGroupMemberManager.Group group = JamSyncGroupMemberManager.getInstance().getGroup(fromGroupUUID);
syncAllForumInfo(group);
syncAllQuestions(group);
syncAllIdeas(group);
syncAllDiscussions(group);
} catch (final Exception e) {
System.out.println("\n JamSyncGroupQIDs::Sync error: " + e.getMessage());
e.printStackTrace();
}
System.out.println(" JamSyncGroupQIDs::SYNC End!");
System.out.println("\n ##################################################################################################################################################");
}
}