public String getAllChangesInXML(HashMap<Long, Pair<String, String>> tasksChanges) throws IOException, JSONException, ParserConfigurationException, TransformerException { String allChangesInXML; Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); Element root = doc.createElement("changes"); doc.appendChild(root); Element existingTasks = doc.createElement("existingTasks"); existingTasks.setTextContent(getAllExistingTasksWithGlobalId().toString()); root.appendChild(existingTasks); Element changedTasksEl = doc.createElement("changedTasks"); root.appendChild(changedTasksEl); Iterator it = tasksChanges.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry) it.next(); long localId = (long) pair.getKey(); Pair<String, String> change = (Pair<String, String>) pair.getValue(); Task task = tasksManager.getTaskByLocalId(localId); Element changedTaskEl; if (task != null) { changedTaskEl = TaskHelper.taskToXML(doc, task, "changedTask"); } else { Long globalId = taskChangesDbHelper.getGlobalIdOfDeletedTask(localId); if (globalId != 0 && change.first.equals("DELETED")) { changedTaskEl = doc.createElement("changedTask"); changedTaskEl.setAttribute("globalId", globalId.toString()); changedTaskEl.setAttribute("id", Long.toString(localId)); } else { // We don't need send info about the deleted task, that is not known for server taskChangesDbHelper.uncheckFromSync(localId); continue; } } Element changeEl = doc.createElement("change"); Element statusEl = doc.createElement("status"); statusEl.setTextContent(change.first); changeEl.appendChild(statusEl); Element datetimeEl = doc.createElement("changeDatetime"); datetimeEl.setTextContent(change.second); changeEl.appendChild(datetimeEl); changedTaskEl.appendChild(changeEl); changedTasksEl.appendChild(changedTaskEl); } // Element foldersDriveIdsEl = doc.createElement("foldersIds"); // foldersDriveIdsEl.setTextContent(GoogleDriveManager.getInstance(BrainasApp.getAppContext()).getFoldersIds().toString()); // root.appendChild(foldersDriveIdsEl); Transformer transformer = TransformerFactory.newInstance().newTransformer(); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); transformer.transform(new DOMSource(doc), result); allChangesInXML = writer.toString(); return allChangesInXML; }