Mercurial Hosting > nabble
comparison src/nabble/modules/workgroup/Assignment.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:7ecd1a4ef557 |
---|---|
1 package nabble.modules.workgroup; | |
2 | |
3 import java.io.Serializable; | |
4 import java.sql.ResultSet; | |
5 import java.sql.SQLException; | |
6 import fschmidt.db.DbDatabase; | |
7 import fschmidt.db.DbNull; | |
8 import fschmidt.db.DbRecord; | |
9 import fschmidt.db.LongKey; | |
10 import nabble.model.Db; | |
11 import nabble.model.ExtensionFactory; | |
12 import nabble.model.ModelHome; | |
13 import nabble.model.Node; | |
14 import nabble.model.User; | |
15 | |
16 | |
17 final class Assignment { | |
18 | |
19 /** Must be public because XML backups use reflection to create extension objects. */ | |
20 public static final class ExportData implements Serializable { | |
21 String assigneeEmail; | |
22 String assigneeName; | |
23 Integer priority; | |
24 } | |
25 | |
26 private static final ExtensionFactory<Node,Assignment> FACTORY = new ExtensionFactory<Node,Assignment>() { | |
27 | |
28 public String getName() { | |
29 return WorkgroupModule.INSTANCE.getName(); | |
30 } | |
31 | |
32 public Class<Assignment> extensionClass() { | |
33 return Assignment.class; | |
34 } | |
35 | |
36 public Assignment construct(Node node) { | |
37 return null; | |
38 } | |
39 | |
40 public Assignment construct(Node node,ResultSet rs) | |
41 throws SQLException | |
42 { | |
43 long assignedUserId = rs.getLong("assigned_user"); | |
44 if( rs.wasNull() ) | |
45 return null; | |
46 User user = node.getSite().getUser(assignedUserId); | |
47 int priority = rs.getInt("assigned_priority"); | |
48 return new Assignment(node,user,priority); | |
49 } | |
50 | |
51 public Serializable getExportData(Node node) { | |
52 Assignment assignment = node.getExtension(this); | |
53 if( assignment == null ) | |
54 return null; | |
55 ExportData data = new ExportData(); | |
56 data.assigneeEmail = assignment.assignee.getEmail(); | |
57 data.assigneeName = assignment.assignee.getName(); | |
58 data.priority = assignment.priority; | |
59 return data; | |
60 } | |
61 | |
62 public void saveExportData(Node node,Serializable s) { | |
63 ExportData data = (ExportData)s; | |
64 User user = node.getSite().getOrCreateUser(data.assigneeEmail,data.assigneeName); | |
65 Assignment assignment = new Assignment(node,user,data.priority); | |
66 assignment.save(); | |
67 } | |
68 }; | |
69 | |
70 static { | |
71 ModelHome.addNodeExtensionFactory(FACTORY); | |
72 } | |
73 | |
74 static void init() {} | |
75 | |
76 public static Assignment of(Node node) { | |
77 return node.getExtension(FACTORY); | |
78 } | |
79 | |
80 | |
81 | |
82 private Node node; | |
83 final User assignee; | |
84 final int priority; | |
85 | |
86 Assignment(Node node,User assignee,int priority) { | |
87 if( priority < 1 || priority > 5 || assignee==null ) | |
88 throw new IllegalArgumentException(); | |
89 this.node = node; | |
90 this.assignee = assignee; | |
91 this.priority = priority; | |
92 } | |
93 | |
94 void save() { | |
95 DbDatabase db = node.getSite().getDb(); | |
96 if( !db.isInTransaction() ) { | |
97 db.beginTransaction(); | |
98 try { | |
99 node = node.getGoodCopy(); | |
100 save(); | |
101 db.commitTransaction(); | |
102 } finally { | |
103 db.endTransaction(); | |
104 } | |
105 return; | |
106 } | |
107 if( !assignee.getSite().equals(node.getSite()) ) | |
108 throw new RuntimeException(); | |
109 DbRecord<LongKey,?> record = node.getDbRecord(); | |
110 record.fields().put("assigned_user", assignee.getId()); | |
111 record.fields().put("assigned_priority", priority); | |
112 node.update(); | |
113 } | |
114 | |
115 static void unassign(Node node) { | |
116 if( Assignment.of(node) != null ) { | |
117 DbRecord<LongKey,?> record = node.getDbRecord(); | |
118 record.fields().put("assigned_user",DbNull.INTEGER); | |
119 record.fields().put("assigned_priority",DbNull.INTEGER); | |
120 node.update(); | |
121 } | |
122 } | |
123 } |