View Javadoc
1   /**
2    * @author mchyzer
3    * $Id$
4    */
5   package edu.internet2.middleware.grouper.grouperUi.beans.api;
6   
7   import java.util.ArrayList;
8   import java.util.List;
9   
10  import edu.internet2.middleware.grouper.ui.GrouperUiFilter;
11  import org.apache.commons.lang.StringUtils;
12  
13  import edu.internet2.middleware.grouper.Group;
14  import edu.internet2.middleware.grouper.GroupFinder;
15  import edu.internet2.middleware.grouper.GrouperSession;
16  import edu.internet2.middleware.grouper.app.loader.GrouperLoaderStatus;
17  import edu.internet2.middleware.grouper.app.loader.db.Hib3GrouperLoaderLog;
18  import edu.internet2.middleware.grouper.grouperUi.beans.ui.GrouperLoaderContainer;
19  import edu.internet2.middleware.grouper.ui.util.GrouperUiConfig;
20  import edu.internet2.middleware.grouper.util.GrouperUtil;
21  import java.util.Locale;
22  
23  /**
24   * gui class to display a loader log
25   */
26  public class GuiHib3GrouperLoaderLog {
27  
28    /**
29     * 
30     * @param hib3GrouperLoaderLogs
31     * @return hib3GrouperLoaderLogs
32     */
33    public static List<GuiHib3GrouperLoaderLog> convertFromHib3GrouperLoaderLogs(List<Hib3GrouperLoaderLog> hib3GrouperLoaderLogs) {
34      return convertFromHib3GrouperLoaderLogs(hib3GrouperLoaderLogs, null, -1);
35    }
36  
37    /**
38     * gui group of group being loaded if applicable
39     */
40    private GuiGroup loadedGuiGroup;
41  
42    /**
43     * get the loaded group, not null if there are multiple
44     * @return the loaded group
45     */
46    public GuiGroup getLoadedGuiGroup() {
47  
48      if (this.loadedGuiGroup == null) {
49      
50        String jobName = null;
51          
52        //if there is a parent than this is a child
53        if (!StringUtils.isBlank(this.hib3GrouperLoaderLog.getParentJobId())) {
54    
55          jobName = this.hib3GrouperLoaderLog.getJobName();
56          
57        } else {
58          
59          //see if this is a simple job
60          /*
61          // TODO why was this getting the job name so indirectly??
62          GrouperLoaderType grouperLoaderType = GrouperRequestContainer.retrieveFromRequestOrCreate()
63              .getGrouperLoaderContainer().getGrouperLoaderType();
64          
65          if (grouperLoaderType == GrouperLoaderType.SQL_SIMPLE || grouperLoaderType == GrouperLoaderType.LDAP_SIMPLE) {
66            jobName = GrouperRequestContainer.retrieveFromRequestOrCreate()
67                .getGrouperLoaderContainer().getJobName();
68          } */
69          
70          // this could be run via the AdminContainer as well so don't rely on GrouperLoaderContainer being there
71          if (this.hib3GrouperLoaderLog.getJobName() != null && 
72              this.hib3GrouperLoaderLog.getJobName().startsWith("SQL_SIMPLE__") || this.hib3GrouperLoaderLog.getJobName().startsWith("LDAP_SIMPLE__")) {
73            jobName = this.hib3GrouperLoaderLog.getJobName();
74          }
75          
76        }
77        
78        if (jobName == null) { 
79          return null;
80        }
81        
82        String groupName = GrouperLoaderContainer.retrieveGroupNameFromJobName(jobName);
83        
84        //not sure why it would be null, but program defensively
85        if (StringUtils.isBlank(groupName)) {
86          
87          return null;
88          
89        }
90    
91        Group group = GroupFinder.findByName(GrouperSession.staticGrouperSession(), groupName, false);
92        
93        if (group == null) {
94          return null;
95        }
96        this.loadedGuiGroup = new GuiGroup(group);
97      }
98      
99      return this.loadedGuiGroup;
100   }
101   
102   /**
103    * @return true if this is a job that would load one or more groups
104    */
105   public boolean isLoadedGroupJob() {
106     String jobName = this.hib3GrouperLoaderLog.getJobName();
107     
108     if (jobName == null) {
109       return false;
110     }
111     
112     if (jobName.startsWith("SQL_SIMPLE__") || jobName.startsWith("LDAP_SIMPLE__") ||
113         jobName.startsWith("SQL_GROUP_LIST__") || jobName.startsWith("LDAP_GROUP_LIST") ||
114         jobName.startsWith("LDAP_GROUPS_FROM_ATTRIBUTES")) {
115       return true;
116     }
117     
118     return false;
119   }
120   
121   /**
122    * 
123    * @return status background color
124    */
125   public String getStatusBackgroundColor() {
126     
127     GrouperLoaderStatus grouperLoaderStatus = GrouperLoaderStatus.ERROR;
128     
129     if (!StringUtils.isBlank(this.hib3GrouperLoaderLog.getStatus())) {
130       
131       grouperLoaderStatus = GrouperLoaderStatus.valueOfIgnoreCase(this.hib3GrouperLoaderLog.getStatus(), false);
132       
133     }
134     
135     if (grouperLoaderStatus == null) {
136       
137       grouperLoaderStatus = GrouperLoaderStatus.ERROR;
138       
139     }
140 
141     switch(grouperLoaderStatus) {
142       case ERROR:
143       case CONFIG_ERROR:
144         return "red";
145       case SUBJECT_PROBLEMS:
146       case WARNING:
147         return "orange";
148       case RUNNING:
149       case STARTED:
150         return "yellow";
151       case SUCCESS:
152         return "green";
153     }
154     return "red";
155   }
156   
157   /**
158    * 
159    * @return status background color
160    */
161   public String getStatusTextColor() {
162     
163     GrouperLoaderStatus grouperLoaderStatus = GrouperLoaderStatus.ERROR;
164     
165     if (!StringUtils.isBlank(this.hib3GrouperLoaderLog.getStatus())) {
166       
167       grouperLoaderStatus = GrouperLoaderStatus.valueOfIgnoreCase(this.hib3GrouperLoaderLog.getStatus(), false);
168       
169     }
170     
171     if (grouperLoaderStatus == null) {
172       
173       grouperLoaderStatus = GrouperLoaderStatus.ERROR;
174       
175     }
176 
177     switch(grouperLoaderStatus) {
178       case ERROR:
179       case CONFIG_ERROR:
180         return "white";
181       case SUBJECT_PROBLEMS:
182       case WARNING:
183         return "black";
184       case RUNNING:
185       case STARTED:
186         return "black";
187       case SUCCESS:
188         return "white";
189     }
190     return "white";
191   }
192   
193   /**
194    * 
195    * @param hib3GrouperLoaderLogs
196    * @param configMax
197    * @param defaultMax
198    * @return groups
199    */
200   public static List<GuiHib3GrouperLoaderLog> convertFromHib3GrouperLoaderLogs(List<Hib3GrouperLoaderLog> hib3GrouperLoaderLogs, String configMax, int defaultMax) {
201     List<GuiHib3GrouperLoaderLog> tempHib3LoaderLogs = new ArrayList<GuiHib3GrouperLoaderLog>();
202     
203     Integer max = null;
204     
205     if (!StringUtils.isBlank(configMax)) {
206       max = GrouperUiConfig.retrieveConfig().propertyValueInt(configMax, defaultMax);
207     }
208     
209     int count = 0;
210     for (Hib3GrouperLoaderLog hib3GrouperLoaderLog : GrouperUtil.nonNull(hib3GrouperLoaderLogs)) {
211       tempHib3LoaderLogs.add(new GuiHib3GrouperLoaderLog(hib3GrouperLoaderLog));
212       if (max != null && ++count >= max) {
213         break;
214       }
215     }
216     
217     return tempHib3LoaderLogs;
218     
219   }
220 
221   /**
222    * @param hib3GrouperLoaderLog1
223    */
224   public GuiHib3GrouperLoaderLog(Hib3GrouperLoaderLog hib3GrouperLoaderLog1) {
225     super();
226     this.hib3GrouperLoaderLog = hib3GrouperLoaderLog1;
227   }
228 
229   /**
230    * return the encosed object
231    * @return the log object
232    */
233   public Hib3GrouperLoaderLog getHib3GrouperLoaderLog() {
234     return this.hib3GrouperLoaderLog;
235   }
236   
237   /**
238    * encloses this
239    */
240   private Hib3GrouperLoaderLog hib3GrouperLoaderLog;
241   
242   /**
243    * 
244    */
245   public GuiHib3GrouperLoaderLog() {
246   }
247 
248   private String convertMillisToTime(Integer millis) {
249     String unit = GrouperUiConfig.retrieveConfig().propertyValueString("uiV2.admin.daemonJob.elapsedTimeUnit", "milliseconds");
250 
251     if (millis == null) {
252       return null;
253     }
254 
255     if (millis == 0) {
256       return "0";
257     }
258 
259     Locale locale = GrouperUiFilter.retrieveLocale();
260     String result;
261 
262     switch (unit) {
263       case "seconds":
264         result = String.format(locale, "%.2f", millis / 1000f);
265         break;
266       case "minutes":
267         result = String.format(locale, "%.2f", millis/60000f);
268         break;
269       case "h:m:s":
270         long millis2 = millis;
271         long hours2 = millis2 / (1000 * 60 * 60);
272         millis2 %= (1000 * 60 * 60);
273         long minutes2 = millis2 / (1000 * 60);
274         millis2 %= (1000 * 60);
275         long seconds2 = millis2 / 1000;
276         long ms2 = millis2 % 1000;
277 
278         result = String.format("%d:%02d:%02d.%03d", hours2, minutes2, seconds2, ms2);
279         break;
280       case "hms":
281         long millis3 = millis;
282         long hours3 = millis3 / (1000 * 60 * 60);
283         millis3 %= (1000 * 60 * 60);
284         long minutes3 = millis3 / (1000 * 60);
285         millis3 %= (1000 * 60);
286         float seconds3 = millis3 / 1000f;
287 
288         StringBuffer buffer = new StringBuffer();
289         if (hours3 > 0) {
290           buffer.append(hours3 + "h");
291         }
292         if (hours3 > 0 || minutes3 > 0) {
293           buffer.append(minutes3 + "m");
294         }
295         if (hours3 > 0 || minutes3 > 0 || seconds3 > 0) {
296           buffer.append(String.format(locale, "%.2f", seconds3) + "s");
297         } else {
298           buffer.append(millis3 + "ms");
299         }
300 
301         result = buffer.toString();
302         break;
303       case "milliseconds":
304       default:
305         result = millis.toString();
306     }
307 
308     return result;
309   }
310 
311   public String getTotalElapsedFormatted() {
312     return convertMillisToTime(hib3GrouperLoaderLog.getMillis());
313   }
314 
315   public String getGetDataElapsedFormatted() {
316     return convertMillisToTime(hib3GrouperLoaderLog.getMillisGetData());
317   }
318 
319   public String getLoadDataElapsedFormatted() {
320     return convertMillisToTime(hib3GrouperLoaderLog.getMillisLoadData());
321   }
322 }