View Javadoc

1   /**
2    * 2008, Digitalis Informatica. All rights reserved. Distribuicao e Gestao de Informatica, Lda. Estrada de Paco de Arcos
3    * num.9 - Piso -1 2780-666 Paco de Arcos Telefone: (351) 21 4408990 Fax: (351) 21 4408999 http://www.digitalis.pt
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   * The user issue manager implementation. Singleton pattern.
22   * 
23   * @author Rodrigo Gonçalves <a href="mailto:rgoncalves@digitalis.pt">rgoncalves@digitalis.pt</a><br/>
24   * @created 2008/11/13
25   */
26  public class UsageIssuesManagerImpl implements IUsageIssuesManager {
27  
28      /** The singleton instance. */
29      final static private IUsageIssuesManager INSTANCE = new UsageIssuesManagerImpl();
30  
31      /**
32       * Singleton pattern instance accessor.
33       * 
34       * @return the instance
35       */
36      static public IUsageIssuesManager getInstance()
37      {
38          return INSTANCE;
39      }
40  
41      /** Flag that controls if there are issues */
42      private boolean hasIssues = false;
43  
44      /** The issues map. <K=location, V=issue set> */
45      private Map<String, List<UsageIssue>> issues = new HashMap<String, List<UsageIssue>>();
46  
47      /** Private ctor. */
48      private UsageIssuesManagerImpl()
49      {}
50  
51      /**
52       * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#addIssue(pt.digitalis.dif.dem.objects.issues.IssueType,
53       *      pt.digitalis.dif.dem.objects.issues.IssueScope, java.lang.String, java.lang.String, java.lang.Exception)
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       * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#addIssue(pt.digitalis.dif.dem.objects.issues.UsageIssue)
81       */
82      public void addIssue(UsageIssue usageIssue)
83      {
84          // Check if the given UID exists, if not create it
85          if (!getIssues().containsKey(usageIssue.getLocation()))
86              getIssues().put(usageIssue.getLocation(), new ArrayList<UsageIssue>());
87  
88          // Add the issue
89          boolean addIssue = true;
90  
91          // Validate issue UID if defined. Prevent duplicate reportings...
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      * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#getIssues()
109      */
110     public Map<String, List<UsageIssue>> getIssues()
111     {
112         return this.issues;
113     }
114 
115     /**
116      * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#getIssues(java.lang.String)
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      * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#hasIssues()
128      */
129     public boolean hasIssues()
130     {
131         return this.hasIssues;
132     }
133 
134     /**
135      * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#hasIssues(java.lang.String)
136      */
137     public boolean hasIssues(String location)
138     {
139         if (hasIssues())
140         {
141             // One issue is "issues"
142             if (this.getIssues().get(location) != null && this.getIssues().get(location).size() > 0)
143                 return true;
144         }
145         return false;
146     }
147 
148     /**
149      * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#logAllIssuesByEntity()
150      */
151     public void logAllIssuesByEntity()
152     {
153         // Log only if there's data
154         if (getIssues().size() > 0)
155         {
156             for (String uid: getIssues().keySet())
157             {
158                 logIssues(uid);
159             }
160         }
161     }
162 
163     /**
164      * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#logAllIssuesByType()
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      * @see pt.digitalis.dif.dem.managers.IUsageIssuesManager#logIssues(java.lang.String)
204      */
205     public void logIssues(String entityUID)
206     {
207         // Log only if there's data
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 }