1
2
3
4
5
6 package pt.digitalis.dif.dem.managers.impl;
7
8 import java.util.ArrayList;
9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12
13 import pt.digitalis.dif.dem.managers.IUsageIssuesManager;
14 import pt.digitalis.dif.dem.objects.issues.IssueScope;
15 import pt.digitalis.dif.dem.objects.issues.IssueType;
16 import pt.digitalis.dif.dem.objects.issues.UsageIssue;
17 import pt.digitalis.dif.utils.logging.DIFLogger;
18 import pt.digitalis.utils.common.StringUtils;
19
20
21
22
23
24
25
26 public class UsageIssuesManagerImpl implements IUsageIssuesManager {
27
28
29 final static private IUsageIssuesManager INSTANCE = new UsageIssuesManagerImpl();
30
31
32
33
34
35
36 static public IUsageIssuesManager getInstance()
37 {
38 return INSTANCE;
39 }
40
41
42 private boolean hasIssues = false;
43
44
45 private Map<String, List<UsageIssue>> issues = new HashMap<String, List<UsageIssue>>();
46
47
48 private UsageIssuesManagerImpl()
49 {}
50
51
52
53
54
55 public void addIssue(IssueType issueType, IssueScope issueScope, String location, String issueDescription,
56 Exception exception)
57 {
58
59 UsageIssue issue = new UsageIssue();
60
61 if (issueType != null)
62 issue.setIssueType(issueType);
63
64 if (issueScope != null)
65 issue.setIssueScope(issueScope);
66
67 if (location != null)
68 issue.setLocation(location);
69
70 if (issueDescription != null)
71 issue.setIssueDescription(issueDescription);
72
73 if (exception != null)
74 issue.setException(exception);
75
76 this.addIssue(issue);
77 }
78
79
80
81
82 public void addIssue(UsageIssue usageIssue)
83 {
84
85 if (!getIssues().containsKey(usageIssue.getLocation()))
86 getIssues().put(usageIssue.getLocation(), new ArrayList<UsageIssue>());
87
88
89 boolean addIssue = true;
90
91
92 if (StringUtils.isNotBlank(usageIssue.getUID()))
93 for (UsageIssue existingIssue: getIssues().get(usageIssue.getLocation()))
94 if (usageIssue.getUID().equals(existingIssue.getUID()))
95 {
96 addIssue = false;
97 break;
98 }
99
100 if (addIssue)
101 getIssues().get(usageIssue.getLocation()).add(usageIssue);
102
103 if (!hasIssues)
104 hasIssues = true;
105 }
106
107
108
109
110 public Map<String, List<UsageIssue>> getIssues()
111 {
112 return this.issues;
113 }
114
115
116
117
118 public List<UsageIssue> getIssues(String entityUID)
119 {
120 if (getIssues().containsKey(entityUID))
121 return getIssues().get(entityUID);
122 else
123 return null;
124 }
125
126
127
128
129 public boolean hasIssues()
130 {
131 return this.hasIssues;
132 }
133
134
135
136
137 public boolean hasIssues(String location)
138 {
139 if (hasIssues())
140 {
141
142 if (this.getIssues().get(location) != null && this.getIssues().get(location).size() > 0)
143 return true;
144 }
145 return false;
146 }
147
148
149
150
151 public void logAllIssuesByEntity()
152 {
153
154 if (getIssues().size() > 0)
155 {
156 for (String uid: getIssues().keySet())
157 {
158 logIssues(uid);
159 }
160 }
161 }
162
163
164
165
166 public void logAllIssuesByType()
167 {
168 if (getIssues().size() > 0)
169 {
170 List<UsageIssue> errorIssues = new ArrayList<UsageIssue>();
171 List<UsageIssue> warnIssues = new ArrayList<UsageIssue>();
172 List<UsageIssue> infoIssues = new ArrayList<UsageIssue>();
173
174 for (String uid: getIssues().keySet())
175 {
176 for (UsageIssue issue: getIssues(uid))
177 {
178 if (issue.getIssueType().equals(IssueType.ERROR))
179 errorIssues.add(issue);
180 else if (issue.getIssueType().equals(IssueType.WARN))
181 warnIssues.add(issue);
182 else if (issue.getIssueType().equals(IssueType.INFO))
183 infoIssues.add(issue);
184 }
185 }
186
187 if (errorIssues.size() > 0)
188 for (UsageIssue issue: errorIssues)
189 DIFLogger.getLogger().error(issue.toString());
190
191 if (warnIssues.size() > 0)
192 for (UsageIssue issue: warnIssues)
193 DIFLogger.getLogger().warn(issue.toString());
194
195 if (infoIssues.size() > 0)
196 for (UsageIssue issue: infoIssues)
197 DIFLogger.getLogger().info(issue.toString());
198
199 }
200 }
201
202
203
204
205 public void logIssues(String entityUID)
206 {
207
208 if (getIssues(entityUID).size() > 0)
209 {
210 for (UsageIssue issue: getIssues(entityUID))
211 {
212 if (issue.getIssueType().equals(IssueType.ERROR))
213 {
214 DIFLogger.getLogger().error(issue.toString());
215 }
216 else if (issue.getIssueType().equals(IssueType.WARN))
217 {
218 DIFLogger.getLogger().warn(issue.toString());
219 }
220 else if (issue.getIssueType().equals(IssueType.INFO))
221 {
222 DIFLogger.getLogger().info(issue.toString());
223 }
224 }
225 }
226 }
227 }