]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop/src/org/simantics/interop/issues/AbstractIssue.java
refs #3138
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / issues / AbstractIssue.java
1 package org.simantics.interop.issues;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.List;\r
5 \r
6 import org.eclipse.swt.widgets.Display;\r
7 \r
8 public abstract class AbstractIssue implements Issue{\r
9         \r
10         private String description;\r
11         private List<IssueListener> listeners =  new ArrayList<IssueListener>();\r
12         \r
13         @Override\r
14         public String getDescription() {\r
15                 return description;\r
16         }\r
17         \r
18         public void setDescription(String description) {\r
19                 this.description = description;\r
20                 fireUpdated();\r
21         }\r
22         \r
23         protected void fireUpdated() {\r
24                 Display.getDefault().asyncExec(new Runnable() {\r
25                         @Override\r
26                         public void run() {\r
27                                 synchronized (listeners) {\r
28                                         for (IssueListener l : listeners) {\r
29                                                 l.updated(AbstractIssue.this);\r
30                                         }       \r
31                                 }\r
32                                 \r
33                         }\r
34                 });\r
35         }\r
36         \r
37         protected void fireDisposed() {\r
38                 Display.getDefault().asyncExec(new Runnable() {\r
39                         @Override\r
40                         public void run() {\r
41                                 List<IssueListener> list = new ArrayList<IssueListener>();\r
42                                 list.addAll(listeners);\r
43                                 for (IssueListener l : list) {\r
44                                         l.disposed(AbstractIssue.this);\r
45                                 }\r
46                                 listeners.clear();\r
47                         }\r
48                 });\r
49         }\r
50         \r
51         @Override\r
52         public void addListener(IssueListener listener) {\r
53                 synchronized(listeners) {\r
54                         listeners.add(listener);\r
55                 }\r
56         }\r
57         \r
58         @Override\r
59         public void removeListener(IssueListener listener) {\r
60                 synchronized(listeners) {\r
61                         listeners.remove(listener);\r
62                 }\r
63         }\r
64         \r
65         @Override\r
66         public void dispose() {\r
67                 fireDisposed();\r
68         }\r
69 \r
70 }\r