]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop/src/org/simantics/interop/issues/IssueReporter.java
refs #3138
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / issues / IssueReporter.java
1 package org.simantics.interop.issues;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 \r
7 import org.eclipse.swt.widgets.Display;\r
8 \r
9 /**\r
10  * IssueReporter is singleton class that handles collecting issues.\r
11  * \r
12  * TODO: how to store issues when the application is closed? Memento-based?\r
13  * \r
14  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
15  *\r
16  */\r
17 public class IssueReporter implements IssueListener{\r
18         \r
19         private static IssueReporter INSTANCE;\r
20         \r
21         private List<Issue> issues = new ArrayList<Issue>();\r
22         private List<IssueReporterListener> listeners = new ArrayList<IssueReporterListener>();\r
23         \r
24         \r
25         private IssueReporter() {\r
26                 \r
27         }\r
28         \r
29         public static IssueReporter getInstance() {\r
30                 if (INSTANCE == null)\r
31                         INSTANCE = new IssueReporter();\r
32                 return INSTANCE;\r
33         }\r
34         \r
35         /**\r
36          * Retuns list of issues.\r
37          * @return\r
38          */\r
39         public List<Issue> getIssues() {\r
40                 return Collections.unmodifiableList(issues);\r
41         }\r
42         \r
43         public void addIssue(Issue issue) {\r
44                 issues.add(issue);\r
45                 issue.addListener(this);\r
46                 fireAdded(issue);\r
47         }\r
48         \r
49         public void removeIssue(Issue issue) {\r
50                 issue.removeListener(this);\r
51                 issues.remove(issue);\r
52                 fireRemoved(issue);\r
53         }\r
54         \r
55         @Override\r
56         public void updated(Issue issue) {\r
57                 fireUpdated(issue);\r
58         }\r
59         \r
60         @Override\r
61         public void disposed(Issue issue) {\r
62                 issue.removeListener(this);\r
63                 issues.remove(issue);\r
64                 fireRemoved(issue);\r
65         }\r
66         \r
67         \r
68         public void addListener(IssueReporterListener listener) {\r
69                 listeners.add(listener);\r
70         }\r
71         \r
72         public void removeListener(IssueReporterListener listener) {\r
73                 listeners.remove(listener);\r
74         }\r
75         \r
76         protected void fireAdded(final Issue issue) {\r
77                 Display.getDefault().asyncExec(new Runnable() {\r
78                         @Override\r
79                         public void run() {\r
80                                 for (IssueReporterListener l : listeners)\r
81                                         l.added(issue);\r
82                         }\r
83                 });\r
84         }\r
85         \r
86         protected void fireRemoved(final Issue issue) {\r
87                 Display.getDefault().asyncExec(new Runnable() {\r
88                         @Override\r
89                         public void run() {\r
90                                 for (IssueReporterListener l : listeners)\r
91                                         l.removed(issue);\r
92                         }\r
93                 });\r
94         }\r
95         \r
96         protected void fireUpdated(final Issue issue) {\r
97                 Display.getDefault().asyncExec(new Runnable() {\r
98                         @Override\r
99                         public void run() {\r
100                                 for (IssueReporterListener l : listeners)\r
101                                         l.updated(issue);\r
102                         }\r
103                 });\r
104         }\r
105         \r
106 \r
107 }\r