diff --git a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/PrivateNotes.java b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/PrivateNotes.java
index 8c4a30d94..19773105d 100644
--- a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/PrivateNotes.java
+++ b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/PrivateNotes.java
@@ -15,8 +15,7 @@
*/
package org.jivesoftware.sparkimpl.plugin.scratchpad;
-import org.jivesoftware.smack.SmackException;
-import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.iqprivate.PrivateDataManager;
@@ -32,6 +31,8 @@ import java.io.IOException;
* @author Derek DeMoro
*/
public class PrivateNotes implements PrivateData {
+ public static final String ELEMENT = "scratchpad";
+ public static final String NAMESPACE = "scratchpad:notes";
private String notes;
@@ -43,47 +44,26 @@ public class PrivateNotes implements PrivateData {
}
public void setNotes(String notes) {
- if (notes != null) {
- this.notes = notes.replaceAll("&", "&");
- } else {
- this.notes = notes;
- }
- }
-
- public void setMyNotes(String notes) {
this.notes = notes;
}
- /**
- * Returns the root element name.
- */
@Override
public String getElementName() {
- return "scratchpad";
+ return ELEMENT;
}
- /**
- * Returns the root element XML namespace.
- */
@Override
public String getNamespace() {
- return "scratchpad:notes";
+ return NAMESPACE;
}
- /**
- * Returns the XML representation of the PrivateData.
- */
@Override
- public String toXML() {
- StringBuilder buf = new StringBuilder();
- buf.append("");
-
- if (getNotes() != null) {
- buf.append("").append(getNotes()).append("");
- }
-
- buf.append("");
- return buf.toString();
+ public XmlStringBuilder toXML() {
+ XmlStringBuilder buf = new XmlStringBuilder();
+ buf.halfOpenElement(ELEMENT).xmlnsAttribute(NAMESPACE).rightAngleBracket();
+ buf.optElement("text", getNotes());
+ buf.closeElement(ELEMENT);
+ return buf;
}
/**
@@ -104,7 +84,7 @@ public class PrivateNotes implements PrivateData {
if (eventType == XmlPullParser.Event.START_ELEMENT && "text".equals(parser.getName())) {
notes.setNotes(parser.nextText());
} else if (eventType == XmlPullParser.Event.END_ELEMENT) {
- if ("scratchpad".equals(parser.getName())) {
+ if (ELEMENT.equals(parser.getName())) {
done = true;
}
}
@@ -113,33 +93,28 @@ public class PrivateNotes implements PrivateData {
}
}
+ static {
+ PrivateDataManager.addPrivateDataProvider(ELEMENT, NAMESPACE, new PrivateNotes.Provider());
+ }
+
public static void savePrivateNotes(PrivateNotes notes) {
PrivateDataManager manager = SparkManager.getSessionManager().getPersonalDataManager();
-
- PrivateDataManager.addPrivateDataProvider("scratchpad", "scratchpad:notes", new PrivateNotes.Provider());
try {
manager.setPrivateData(notes);
- } catch (XMPPException | SmackException | InterruptedException e) {
+ } catch (Exception e) {
Log.error(e);
+ throw new RuntimeException(e.getMessage());
}
}
public static PrivateNotes getPrivateNotes() {
PrivateDataManager manager = SparkManager.getSessionManager().getPersonalDataManager();
- PrivateDataManager.addPrivateDataProvider("scratchpad", "scratchpad:notes", new PrivateNotes.Provider());
-
- PrivateNotes notes = null;
try {
- notes = (PrivateNotes) manager.getPrivateData("scratchpad", "scratchpad:notes");
- } catch (XMPPException | SmackException | InterruptedException e) {
+ PrivateData privateData = manager.getPrivateData(ELEMENT, NAMESPACE);
+ return privateData != null ? (PrivateNotes) privateData : new PrivateNotes();
+ } catch (Exception e) {
Log.error(e);
+ throw new RuntimeException(e.getMessage());
}
-
- if (notes.getNotes() != null) {
- String note = notes.getNotes().replaceAll("&", "&");
- notes.setMyNotes(note);
- }
-
- return notes;
}
}
diff --git a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/ScratchPadPlugin.java b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/ScratchPadPlugin.java
index ac02e65c3..21419594a 100644
--- a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/ScratchPadPlugin.java
+++ b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/ScratchPadPlugin.java
@@ -56,7 +56,6 @@ public class ScratchPadPlugin implements Plugin {
@Override
public void initialize() {
-
TimerTask startTask = new TimerTask() {
@Override
public void run() {
@@ -94,17 +93,6 @@ public class ScratchPadPlugin implements Plugin {
}
});
- //TODO REMOVE
- @SuppressWarnings("unused")
- int index = -1;
- JPanel commandPanel = SparkManager.getWorkspace().getCommandPanel();
- for (int i = 0; i < commandPanel.getComponentCount(); i++) {
- if (commandPanel.getComponent(i) instanceof JLabel) {
- break;
- }
- }
-
-
JMenuItem taskMenu = new JMenuItem(Res.getString("button.view.tasklist"), SparkRes.getImageIcon(SparkRes.Icon.DESKTOP_IMAGE));
taskMenu.addActionListener(e -> showTaskList());
@@ -123,7 +111,6 @@ public class ScratchPadPlugin implements Plugin {
// Start notifications.
new TaskNotification();
-
}
@@ -133,8 +120,6 @@ public class ScratchPadPlugin implements Plugin {
panel_events.removeAll();
mainPanel.removeAll();
- //final List taskList = new ArrayList();
- //final JPanel mainPanel = new JPanel();
mainPanel.setLayout(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0, true, false));
mainPanel.setBackground(Color.white);
@@ -285,6 +270,7 @@ public class ScratchPadPlugin implements Plugin {
addButton.addActionListener(addAction);
Tasks tasks = Tasks.getTaskList();
+ SHOW_ALL_TASKS = tasks.isShowAll();
updateTaskUI(tasks);
if (SHOW_ALL_TASKS) {
@@ -314,12 +300,13 @@ public class ScratchPadPlugin implements Plugin {
public void actionPerformed(ActionEvent actionEvent) {
// Save it.
Tasks tasks = new Tasks();
+ tasks.setShowAll(SHOW_ALL_TASKS);
for (TaskUI ui : taskList) {
Task task = ui.getTask();
tasks.addTask(task);
}
- Tasks.saveTasks(tasks, SparkManager.getConnection());
+ Tasks.saveTasks(tasks);
}
};
@@ -499,60 +486,4 @@ public class ScratchPadPlugin implements Plugin {
return taskList;
}
-// private class DragWindowAdapter extends MouseAdapter
-// implements MouseMotionListener {
-// private JFrame m_msgWnd;
-// private int m_mousePrevX,
-// m_mousePrevY;
-// private int m_frameX,
-// m_frameY;
-//
-// public DragWindowAdapter(JFrame mw) {
-// m_msgWnd = mw;
-// }
-//
-// public void mousePressed(MouseEvent e) {
-// super.mousePressed(e);
-// m_mousePrevX = e.getX();
-// m_mousePrevY = e.getY();
-// m_frameX = 0;
-// m_frameY = 0;
-// }
-//
-// public void mouseDragged(MouseEvent e) {
-// int X = e.getX();
-// int Y = e.getY();
-// int MsgX = m_msgWnd.getX();
-// int MsgY = m_msgWnd.getY();
-//
-// int moveX = X - m_mousePrevX; // Negative if move left
-// int moveY = Y - m_mousePrevY; // Negative if move down
-// if (moveX == 0 && moveY == 0) return;
-// m_mousePrevX = X - moveX;
-// m_mousePrevY = Y - moveY;
-//
-// //System.out.println("mouseDragged x,y = (" + X + "," + Y +
-// // ") diff (" + moveX + "," + moveY +
-// // ") MsgX/MsgY = " + MsgX + "," + MsgY);
-//
-// // mouseDragged caused by setLocation() on frame.
-// if (m_frameX == MsgX && m_frameY == MsgY) {
-// m_frameX = 0;
-// m_frameY = 0;
-// return;
-// }
-//
-// // '-' would cause wrong direction for movement.
-// int newFrameX = MsgX + moveX;
-// // '-' would cause wrong
-// int newFrameY = MsgY + moveY;
-//
-// m_frameX = newFrameX;
-// m_frameY = newFrameY;
-// m_msgWnd.setLocation(newFrameX, newFrameY);
-// }
-//
-// public void mouseMoved(MouseEvent e) {
-// }
-// }
}
diff --git a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/TaskNotification.java b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/TaskNotification.java
index 17fa8a871..a0372da3c 100644
--- a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/TaskNotification.java
+++ b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/TaskNotification.java
@@ -24,7 +24,6 @@ import javax.swing.*;
import java.awt.*;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
-import java.util.Iterator;
import java.util.TimerTask;
import static java.time.ZoneId.*;
@@ -62,13 +61,13 @@ public class TaskNotification {
mainPanel.setLayout(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0, true, false));
mainPanel.setBackground(Color.white);
- long now = System.currentTimeMillis();
- Tasks tasks = Tasks.getTaskList();
- if (tasks == null) {
- return;
- }
- java.util.List tasksList = tasks.getTasks();
- Iterator taskIter = tasksList.iterator();
+ long now = System.currentTimeMillis();
+ Tasks tasks;
+ try {
+ tasks = Tasks.getTaskList();
+ } catch (Exception ignored) {
+ return;
+ }
final JPanel titlePanel = new JPanel(new BorderLayout()) {
@Override
@@ -93,8 +92,7 @@ public class TaskNotification {
mainPanel.add(titlePanel);
boolean hasItems = false;
- while (taskIter.hasNext()) {
- Task task = taskIter.next();
+ for (Task task : tasks.getTasks()) {
if (task.isCompleted()) {
continue;
}
diff --git a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/TaskUI.java b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/TaskUI.java
index 5878605fe..b803cbf38 100644
--- a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/TaskUI.java
+++ b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/TaskUI.java
@@ -20,8 +20,8 @@ import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
import java.awt.font.TextAttribute;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -36,9 +36,8 @@ import org.jivesoftware.resource.SparkRes;
/**
*/
-public class TaskUI extends JPanel implements ActionListener {
+public class TaskUI extends JPanel {
- private static final long serialVersionUID = -8443764502684168188L;
private final Task task;
private final JCheckBox box;
@@ -77,7 +76,6 @@ public class TaskUI extends JPanel implements ActionListener {
}
int diff = DateUtils.getDaysDiff(dueDate, new Date().getTime());
-
if (diff > 0){
dueLabel.setForeground(Color.red);
}
@@ -86,30 +84,21 @@ public class TaskUI extends JPanel implements ActionListener {
updateTitleFont();
- box.addActionListener(this);
-
- btn_del.addMouseListener(new MouseListener() {
+ box.addActionListener(e -> {
+ task.setCompleted(isSelected());
+ updateTitleFont();
+ if (ScratchPadPlugin.SHOW_ALL_TASKS) {
+ setVisible(true);
+ }
+ else if (task.isCompleted()) {
+ setVisible(false);
+ }
+ });
+ btn_del.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
Tasks.deleteTask(task);
}
-
- @Override
- public void mouseEntered(MouseEvent e) {
-
- }
- @Override
- public void mouseExited(MouseEvent e) {
-
- }
- @Override
- public void mousePressed(MouseEvent e) {
-
- }
- @Override
- public void mouseReleased(MouseEvent e) {
-
- }
});
}
@@ -121,41 +110,19 @@ public class TaskUI extends JPanel implements ActionListener {
public void updateTitleFont() {
if (task.isCompleted()) {
Font font = box.getFont();
-
-
- Map attribs = font.getAttributes();
-
+ Map attribs = font.getAttributes();
attribs.put(TextAttribute.STRIKETHROUGH, true);
-
box.setFont(new Font(attribs));
box.setSelected(true);
- }
- else {
+ } else {
Font font = box.getFont();
-
- Map Attribs = font.getAttributes();
-
+ Map Attribs = font.getAttributes();
Attribs.put(TextAttribute.STRIKETHROUGH, false);
-
box.setFont(new Font(Attribs));
box.setSelected(false);
}
}
- @Override
- public void actionPerformed(ActionEvent e) {
- task.setCompleted(isSelected());
-
- updateTitleFont();
-
- if (ScratchPadPlugin.SHOW_ALL_TASKS) {
- setVisible(true);
- }
- else if (task.isCompleted()) {
- setVisible(false);
- }
- }
-
public Task getTask() {
return task;
}
diff --git a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/Tasks.java b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/Tasks.java
index 193b0c466..c7078bf7e 100644
--- a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/Tasks.java
+++ b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/scratchpad/Tasks.java
@@ -19,9 +19,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import org.jivesoftware.smack.SmackException;
-import org.jivesoftware.smack.XMPPConnection;
-import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.iqprivate.PrivateDataManager;
@@ -33,14 +31,14 @@ import org.jivesoftware.spark.util.log.Log;
import org.jxmpp.JxmppContext;
/**
+ * Tasks for a TO-DO list
* @author Derek DeMoro
*/
public class Tasks implements PrivateData {
-
+ public static final String ELEMENT = "scratchpad";
+ public static final String NAMESPACE = "scratchpad:tasks";
private List tasks = new ArrayList<>();
-
- public Tasks() {
- }
+ private boolean showAll;
public List getTasks() {
return tasks;
@@ -54,46 +52,44 @@ public class Tasks implements PrivateData {
tasks.add(task);
}
- /**
- * Returns the root element name.
- */
+ public boolean isShowAll() {
+ return showAll;
+ }
+
+ public void setShowAll(boolean showAll) {
+ this.showAll = showAll;
+ }
+
@Override
public String getElementName() {
- return "scratchpad";
+ return ELEMENT;
}
- /**
- * Returns the root element XML namespace.
- */
@Override
public String getNamespace() {
- return "scratchpad:tasks";
+ return NAMESPACE;
}
- /**
- * Returns the XML representation of the PrivateData.
- */
@Override
- public String toXML() {
- StringBuilder buf = new StringBuilder();
- buf.append("");
- buf.append("");
-
+ public XmlStringBuilder toXML() {
+ XmlStringBuilder buf = new XmlStringBuilder();
+ buf.halfOpenElement(ELEMENT).xmlnsAttribute(NAMESPACE).rightAngleBracket();
+ buf.halfOpenElement("tasks");
+ buf.attribute("showAll", isShowAll());
+ buf.rightAngleBracket();
for (Task task : getTasks()) {
- buf.append("");
- buf.append("").append(task.getTitle()).append("");
- buf.append("").append(task.getDueDate()).append("");
- buf.append("").append(task.getCreatedDate()).append("");
+ buf.openElement("task");
+ buf.optElement("title", task.getTitle());
+ buf.optElement("dueDate", task.getDueDate());
+ buf.optElement("creationDate", task.getCreatedDate());
if (task.isCompleted()) {
- buf.append("true");
+ buf.optElement("completed", "true");
}
- buf.append("");
+ buf.closeElement("task");
}
-
- buf.append("");
-
- buf.append("");
- return buf.toString();
+ buf.closeElement("tasks");
+ buf.closeElement(ELEMENT);
+ return buf;
}
/**
@@ -113,15 +109,13 @@ public class Tasks implements PrivateData {
XmlPullParser.Event eventType = parser.next();
if (eventType == XmlPullParser.Event.START_ELEMENT && "tasks".equals(parser.getName())) {
String showAll = parser.getAttributeValue("", "showAll");
- ScratchPadPlugin.SHOW_ALL_TASKS = Boolean.parseBoolean(showAll);
+ tasks.setShowAll(Boolean.parseBoolean(showAll));
}
if (eventType == XmlPullParser.Event.START_ELEMENT && "task".equals(parser.getName())) {
tasks.addTask(getTask(parser));
- } else if (eventType == XmlPullParser.Event.END_ELEMENT) {
- if ("scratchpad".equals(parser.getName())) {
- done = true;
- }
+ } else if (eventType == XmlPullParser.Event.END_ELEMENT && ELEMENT.equals(parser.getName())) {
+ done = true;
}
}
@@ -154,10 +148,8 @@ public class Tasks implements PrivateData {
if (ModelUtil.hasLength(completed)) {
task.setCompleted(Boolean.parseBoolean(completed));
}
- } else if (eventType == XmlPullParser.Event.END_ELEMENT) {
- if ("task".equals(parser.getName())) {
- done = true;
- }
+ } else if (eventType == XmlPullParser.Event.END_ELEMENT && "task".equals(parser.getName())) {
+ done = true;
}
}
@@ -165,43 +157,40 @@ public class Tasks implements PrivateData {
}
- public static void saveTasks(Tasks tasks, XMPPConnection con) {
- PrivateDataManager manager = SparkManager.getSessionManager().getPersonalDataManager();
-
- PrivateDataManager.addPrivateDataProvider("scratchpad", "scratchpad:tasks", new Tasks.Provider());
- try {
- manager.setPrivateData(tasks);
- } catch (XMPPException | SmackException | InterruptedException e) {
- Log.error(e);
- }
+ static {
+ PrivateDataManager.addPrivateDataProvider(ELEMENT, NAMESPACE, new Tasks.Provider());
}
- static {
- PrivateDataManager.addPrivateDataProvider("scratchpad", "scratchpad:tasks", new Tasks.Provider());
+ public static void saveTasks(Tasks tasks) {
+ PrivateDataManager manager = SparkManager.getSessionManager().getPersonalDataManager();
+ try {
+ manager.setPrivateData(tasks);
+ } catch (Exception e) {
+ Log.error(e);
+ throw new RuntimeException(e.getMessage());
+ }
}
public static Tasks getTaskList() {
PrivateDataManager manager = SparkManager.getSessionManager().getPersonalDataManager();
-
- Tasks tasks = null;
try {
- tasks = (Tasks) manager.getPrivateData("scratchpad", "scratchpad:tasks");
- } catch (XMPPException | SmackException | InterruptedException e) {
+ PrivateData privateData = manager.getPrivateData(ELEMENT, NAMESPACE);
+ return privateData != null ? (Tasks) privateData : new Tasks();
+ } catch (Exception e) {
Log.error(e);
+ throw new RuntimeException(e.getMessage());
}
-
- return tasks;
}
/**
* Delete task
*/
- public static void deleteTask(Task task) {
+ public static void deleteTask(Task deletedTask) {
List taskList = ScratchPadPlugin.getTaskList();
// find and delete task in list
for (int i = 0; i < taskList.size(); i++) {
Task t = taskList.get(i).getTask();
- if (t == task) {
+ if (t == deletedTask) {
taskList.remove(i);
break;
}