]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/issue/AnonymousIssue.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / issue / AnonymousIssue.java
1 package org.simantics.db.common.issue;\r
2 \r
3 import java.text.DateFormat;\r
4 import java.text.SimpleDateFormat;\r
5 import java.util.Arrays;\r
6 import java.util.Calendar;\r
7 import java.util.Collection;\r
8 import java.util.HashSet;\r
9 import java.util.Set;\r
10 import java.util.UUID;\r
11 \r
12 import org.simantics.databoard.Bindings;\r
13 import org.simantics.db.Issue;\r
14 import org.simantics.db.Resource;\r
15 import org.simantics.db.WriteGraph;\r
16 import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
17 import org.simantics.db.common.request.IndexRoot;\r
18 import org.simantics.db.common.utils.ListUtils;\r
19 import org.simantics.db.exception.DatabaseException;\r
20 import org.simantics.issues.ontology.IssueResource;\r
21 import org.simantics.layer0.Layer0;\r
22 \r
23 public class AnonymousIssue implements Issue {\r
24 \r
25         public final Resource type;\r
26         public final Resource[] contexts;\r
27 \r
28         public AnonymousIssue(Resource type, Resource ... contexts) {\r
29                 this.type = type;\r
30                 this.contexts = contexts;\r
31         }\r
32 \r
33         public AnonymousIssue(Resource type, Collection<Resource> contexts) {\r
34                 this.type = type;\r
35                 this.contexts = contexts.toArray(new Resource[contexts.size()]);\r
36         }\r
37 \r
38         public void writeAdditionalContext(WriteGraph graph, Resource issue) throws DatabaseException {\r
39 \r
40                 IssueResource IR = IssueResource.getInstance(graph);\r
41 \r
42                 // The main context\r
43                 graph.claim(issue, IR.Issue_HasContext, IR.Issue_HasContext_Inverse, contexts[0]);\r
44                 // A possible parent\r
45                 Layer0 L0 = Layer0.getInstance(graph);\r
46                 Resource parent = graph.getPossibleObject(contexts[0], L0.PartOf);\r
47                 if(parent != null) {\r
48                         graph.claim(issue, IR.Issue_HasContext, IR.Issue_HasContext_Inverse, parent);\r
49                 }\r
50 \r
51         }\r
52 \r
53         @Override\r
54         public Resource write(WriteGraph graph, Resource source) throws DatabaseException {\r
55 \r
56                 Layer0 L0 = Layer0.getInstance(graph);\r
57                 IssueResource IR = IssueResource.getInstance(graph);\r
58 \r
59                 Resource model = graph.syncRequest(new IndexRoot(source), TransientCacheListener.<Resource>instance());\r
60 \r
61                 Resource issue = graph.newResource();\r
62                 graph.claim(issue, L0.InstanceOf, null, type);\r
63                 graph.addLiteral(issue, L0.HasName, L0.NameOf, L0.String, UUID.randomUUID().toString(), Bindings.STRING);\r
64 \r
65                 graph.claim(issue, IR.Issue_HasContexts, IR.Issue_HasContexts_Inverse, ListUtils.create(graph, L0.List, contexts));\r
66 \r
67                 writeAdditionalContext(graph, issue);\r
68 \r
69                 DateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");\r
70                 String created = format.format(Calendar.getInstance().getTime());\r
71                 graph.addLiteral(issue, IR.Issue_creationTime, IR.Issue_creationTime_Inverse, L0.String, created, Bindings.STRING);\r
72                 graph.claim(source, IR.IssueSource_Manages, IR.IssueSource_Manages_Inverse, issue);\r
73                 graph.claim(model, L0.ConsistsOf, L0.PartOf, issue);\r
74                 \r
75                 return issue;\r
76 \r
77         }\r
78 \r
79         @Override\r
80         public String toString() {\r
81                 return Arrays.toString(contexts);\r
82         }\r
83 \r
84         @Override\r
85         public Resource getType() {\r
86                 return type;\r
87         }\r
88 \r
89         @Override\r
90         public Object getMainContext() {\r
91                 return contexts[0];\r
92         }\r
93 \r
94         @Override\r
95         public Set<Resource> getContexts() {\r
96                 HashSet<Resource> result = new HashSet<Resource>();\r
97                 for(Resource context : contexts) result.add(context);\r
98                 return result;\r
99         }\r
100 \r
101 }\r