Java Reference
In-Depth Information
16. public Task getTask(String taskID, Date lastUpdate) throws UpdateException{
17. return UpdateServerDelegate.getTask(taskID, lastUpdate);
18. }
19.
20. public void updateTask(String taskID, Task updatedTask) throws UpdateException{
21. UpdateServerDelegate.updateTask(taskID, updatedTask);
22. }
23. }
The class
UpdateServerDelegate
performs the server-side behavior for
ClientPullServerImpl
. Specifically, it
retrieves
Task
objects, and ensures that up-to-date copies of
Tasks
are provided to clients by comparing the last
update
Date
.
Example A.240
UpdateServerDelegate.java
1. import java.util.Date;
2. import java.util.HashMap;
3. public class UpdateServerDelegate{
4. private static HashMap tasks = new HashMap();
5.
6. public static Task getTask(String taskID, Date lastUpdate) throws UpdateException{
7. if (tasks.containsKey(taskID)){
8. Task storedTask = (Task)tasks.get(taskID);
9. if (storedTask.getLastEditDate().after(lastUpdate)){
10. return storedTask;
11. }
12. else{
13. throw new UpdateException("Task " + taskID + " does not need to be updated",
UpdateException.TASK_UNCHANGED);
14. }
15. }
16. else{
17. return loadNewTask(taskID);
18. }
19. }
20.
21. public static void updateTask(String taskID, Task task) throws UpdateException{
22. if (tasks.containsKey(taskID)){
23. if (task.getLastEditDate().equals(((Task)tasks.get(taskID)). getLastEditDate())){
24. ((TaskImpl)task).setLastEditDate(new Date());
25. tasks.put(taskID, task);
26. }
27. else{
28. throw new UpdateException("Task " + taskID + " data must be refreshed before
editing", UpdateException.TASK_OUT_OF_DATE);
29. }
30. }
31. }
32.
33. private static Task loadNewTask(String taskID){
34. Task newTask = new TaskImpl(taskID, "", new Date(), null);
35. tasks.put(taskID, newTask);
36. return newTask;
37. }
38. }
Any problems encountered during the periodic client pull operations are represented by the
UpdateException
class. The
Task
interface and
TaskImpl
class represent the business elements of the example.
Example A.241
Task.java
1. import java.util.Date;
2. import java.io.Serializable;
3. import java.util.ArrayList;
4. public interface Task extends Serializable{
5. public String getTaskID();
6. public Date getLastEditDate();
7. public String getTaskName();
8. public String getTaskDetails();
9. public ArrayList getSubTasks();
10.
11. public void setTaskName(String newName);
12. public void setTaskDetails(String newDetails);
13. public void addSubTask(Task task);
14. public void removeSubTask(Task task);
15. }