src/core/net/sf/basedb/util/extensions/manager/ProcessResults.java

Code
Comments
Other
Rev Date Author Line
5602 07 Apr 11 nicklas 1 /**
5602 07 Apr 11 nicklas 2   $Id$
5602 07 Apr 11 nicklas 3
5602 07 Apr 11 nicklas 4   Copyright (C) 2011 Nicklas Nordborg
5602 07 Apr 11 nicklas 5
5602 07 Apr 11 nicklas 6   This file is part of BASE - BioArray Software Environment.
5602 07 Apr 11 nicklas 7   Available at http://base.thep.lu.se/
5602 07 Apr 11 nicklas 8
5602 07 Apr 11 nicklas 9   BASE is free software; you can redistribute it and/or
5602 07 Apr 11 nicklas 10   modify it under the terms of the GNU General Public License
5602 07 Apr 11 nicklas 11   as published by the Free Software Foundation; either version 3
5602 07 Apr 11 nicklas 12   of the License, or (at your option) any later version.
5602 07 Apr 11 nicklas 13
5602 07 Apr 11 nicklas 14   BASE is distributed in the hope that it will be useful,
5602 07 Apr 11 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5602 07 Apr 11 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5602 07 Apr 11 nicklas 17   GNU General Public License for more details.
5602 07 Apr 11 nicklas 18
5602 07 Apr 11 nicklas 19   You should have received a copy of the GNU General Public License
5602 07 Apr 11 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5602 07 Apr 11 nicklas 21 */
5602 07 Apr 11 nicklas 22 package net.sf.basedb.util.extensions.manager;
5602 07 Apr 11 nicklas 23
5602 07 Apr 11 nicklas 24 import java.util.ArrayList;
5602 07 Apr 11 nicklas 25 import java.util.LinkedList;
5602 07 Apr 11 nicklas 26 import java.util.List;
5602 07 Apr 11 nicklas 27 import java.util.Map;
5602 07 Apr 11 nicklas 28 import java.util.TreeMap;
6372 06 Dec 13 nicklas 29 import java.util.WeakHashMap;
5602 07 Apr 11 nicklas 30
5602 07 Apr 11 nicklas 31 /**
5602 07 Apr 11 nicklas 32   Class for collecting results from a scan for new/deleted/updated
5602 07 Apr 11 nicklas 33   extensions.
5602 07 Apr 11 nicklas 34
5602 07 Apr 11 nicklas 35   @author Nicklas
5602 07 Apr 11 nicklas 36   @since 3.0
5602 07 Apr 11 nicklas 37   @base.modified $Date$
5602 07 Apr 11 nicklas 38 */
5602 07 Apr 11 nicklas 39 public class ProcessResults
5602 07 Apr 11 nicklas 40 {
5602 07 Apr 11 nicklas 41
5602 07 Apr 11 nicklas 42   private final long startTime;
5602 07 Apr 11 nicklas 43
5602 07 Apr 11 nicklas 44   private Map<ExtensionsFile, FileResults> fileResults;
6372 06 Dec 13 nicklas 45   private Map<ExtensionsFile, FileResults> oldFileResults;
6372 06 Dec 13 nicklas 46   
5602 07 Apr 11 nicklas 47   private boolean hasError;
5602 07 Apr 11 nicklas 48   private int numErrorFiles;
5602 07 Apr 11 nicklas 49   private long endTime;
5602 07 Apr 11 nicklas 50   private String summary;
5602 07 Apr 11 nicklas 51
5602 07 Apr 11 nicklas 52   /**
5602 07 Apr 11 nicklas 53     Create a new process results object.
5602 07 Apr 11 nicklas 54   */
5616 27 Apr 11 nicklas 55   public ProcessResults()
5602 07 Apr 11 nicklas 56   {
6372 06 Dec 13 nicklas 57     this(null);
6372 06 Dec 13 nicklas 58   }
6372 06 Dec 13 nicklas 59   
6372 06 Dec 13 nicklas 60   /**
6372 06 Dec 13 nicklas 61     Create a new process results object, keeping information about
6372 06 Dec 13 nicklas 62     previous results.
6372 06 Dec 13 nicklas 63     @since 3.2.4
6372 06 Dec 13 nicklas 64   */
6372 06 Dec 13 nicklas 65   public ProcessResults(ProcessResults oldResults)
6372 06 Dec 13 nicklas 66   {
5602 07 Apr 11 nicklas 67     this.fileResults = new TreeMap<ExtensionsFile, FileResults>();
6372 06 Dec 13 nicklas 68     this.oldFileResults = new WeakHashMap<ExtensionsFile, FileResults>();
6372 06 Dec 13 nicklas 69     if (oldResults != null)
6372 06 Dec 13 nicklas 70     {
6372 06 Dec 13 nicklas 71       oldFileResults.putAll(oldResults.oldFileResults);
6372 06 Dec 13 nicklas 72     }
5602 07 Apr 11 nicklas 73     this.hasError = false;
5602 07 Apr 11 nicklas 74     this.numErrorFiles = 0;
5602 07 Apr 11 nicklas 75     this.startTime = System.currentTimeMillis();
5602 07 Apr 11 nicklas 76   }
5602 07 Apr 11 nicklas 77
5602 07 Apr 11 nicklas 78   /**
5602 07 Apr 11 nicklas 79     Get the start time of the scan as a millisecond value.
5602 07 Apr 11 nicklas 80     @see System#currentTimeMillis()
5602 07 Apr 11 nicklas 81   */
5602 07 Apr 11 nicklas 82   public long getStartTime()
5602 07 Apr 11 nicklas 83   {
5602 07 Apr 11 nicklas 84     return startTime;
5602 07 Apr 11 nicklas 85   }
5602 07 Apr 11 nicklas 86   
5602 07 Apr 11 nicklas 87   /**
5602 07 Apr 11 nicklas 88     Get the end time of the scan as a millisecond value.
5602 07 Apr 11 nicklas 89     @see System#currentTimeMillis()
5602 07 Apr 11 nicklas 90   */
5602 07 Apr 11 nicklas 91   public long getEndTime()
5602 07 Apr 11 nicklas 92   {
5602 07 Apr 11 nicklas 93     return endTime;
5602 07 Apr 11 nicklas 94   }
5602 07 Apr 11 nicklas 95   
5602 07 Apr 11 nicklas 96   /**
5603 08 Apr 11 nicklas 97     Set the end time of the scan.
5603 08 Apr 11 nicklas 98   */
5603 08 Apr 11 nicklas 99   public void setEnded()
5603 08 Apr 11 nicklas 100   {
5603 08 Apr 11 nicklas 101     this.endTime = System.currentTimeMillis();
5603 08 Apr 11 nicklas 102   }
5603 08 Apr 11 nicklas 103
5603 08 Apr 11 nicklas 104   
5603 08 Apr 11 nicklas 105   /**
5602 07 Apr 11 nicklas 106     Get a summary of the scan results as a textual description.
5602 07 Apr 11 nicklas 107   */
5602 07 Apr 11 nicklas 108   public String getSummary()
5602 07 Apr 11 nicklas 109   {
5602 07 Apr 11 nicklas 110     return summary;
5602 07 Apr 11 nicklas 111   }
5602 07 Apr 11 nicklas 112   
5602 07 Apr 11 nicklas 113   /**
5602 07 Apr 11 nicklas 114     Set a summary of the results.
5602 07 Apr 11 nicklas 115   */
5602 07 Apr 11 nicklas 116   public void setSummary(String summary)
5602 07 Apr 11 nicklas 117   {
5602 07 Apr 11 nicklas 118     this.summary = summary;
5602 07 Apr 11 nicklas 119   }
5602 07 Apr 11 nicklas 120   
5602 07 Apr 11 nicklas 121   /**
5602 07 Apr 11 nicklas 122     Check if the scan was successful or not. For more detailed
5602 07 Apr 11 nicklas 123     information use {@link #getResults(ExtensionsFile)}.
5602 07 Apr 11 nicklas 124     @return TRUE if there was any problems, FALSE if everything was 
5602 07 Apr 11 nicklas 125       successful
5602 07 Apr 11 nicklas 126   */
5602 07 Apr 11 nicklas 127   public boolean hasError()
5602 07 Apr 11 nicklas 128   {
5602 07 Apr 11 nicklas 129     return hasError;
5602 07 Apr 11 nicklas 130   }  
5602 07 Apr 11 nicklas 131
5602 07 Apr 11 nicklas 132   /**
5602 07 Apr 11 nicklas 133     The number of extension files that could not be completely loaded
5602 07 Apr 11 nicklas 134     because of an error.
5602 07 Apr 11 nicklas 135   */
5602 07 Apr 11 nicklas 136   public int getNumErrorFiles()
5602 07 Apr 11 nicklas 137   {
5602 07 Apr 11 nicklas 138     return numErrorFiles;
5602 07 Apr 11 nicklas 139   }
5602 07 Apr 11 nicklas 140
5602 07 Apr 11 nicklas 141   public List<FileResults> getAllResults()
5602 07 Apr 11 nicklas 142   {
5602 07 Apr 11 nicklas 143     return new ArrayList<FileResults>(fileResults.values());
5602 07 Apr 11 nicklas 144   }
5602 07 Apr 11 nicklas 145   
5602 07 Apr 11 nicklas 146   /**
6372 06 Dec 13 nicklas 147     Get the results for a specific extensions file. If
6372 06 Dec 13 nicklas 148     no current results exists, old results are searched.
5602 07 Apr 11 nicklas 149     @param xtFile The extensions file to get the results for
5602 07 Apr 11 nicklas 150     @return A {@link FileResults} object or null if the
5602 07 Apr 11 nicklas 151       extensions file is not found
5602 07 Apr 11 nicklas 152   */
5602 07 Apr 11 nicklas 153   public FileResults getResults(ExtensionsFile xtFile)
5602 07 Apr 11 nicklas 154   {
6372 06 Dec 13 nicklas 155     FileResults results = fileResults.get(xtFile);
6372 06 Dec 13 nicklas 156     if (results == null) results = oldFileResults.get(xtFile);
6372 06 Dec 13 nicklas 157     return results;
5602 07 Apr 11 nicklas 158   }
5602 07 Apr 11 nicklas 159
5602 07 Apr 11 nicklas 160   /**
6372 06 Dec 13 nicklas 161     Forget old processing results for the given file.
6372 06 Dec 13 nicklas 162     Should be called when an extension has been uninstalled,
6372 06 Dec 13 nicklas 163      @param xtFile The extensions file to forget
6372 06 Dec 13 nicklas 164      @since 3.2.4
6372 06 Dec 13 nicklas 165   */
6372 06 Dec 13 nicklas 166   public void forgetOldResults(ExtensionsFile xtFile)
6372 06 Dec 13 nicklas 167   {
6372 06 Dec 13 nicklas 168     oldFileResults.remove(xtFile);
6372 06 Dec 13 nicklas 169   }
6372 06 Dec 13 nicklas 170   
6372 06 Dec 13 nicklas 171   /**
5603 08 Apr 11 nicklas 172     Sets a short overall status message for an entire file. Example:
5603 08 Apr 11 nicklas 173     "Installed", "Failed", etc.
5603 08 Apr 11 nicklas 174     @param xtFile The file to set the status on
5603 08 Apr 11 nicklas 175     @param status The status message
5603 08 Apr 11 nicklas 176     @see #addMessage(ExtensionsFile, String)
5603 08 Apr 11 nicklas 177     @see #addErrorMessage(ExtensionsFile, String)
5603 08 Apr 11 nicklas 178   */
5603 08 Apr 11 nicklas 179   public void setStatus(ExtensionsFile xtFile, String status)
5603 08 Apr 11 nicklas 180   {
5603 08 Apr 11 nicklas 181     FileResults m = fileResults.get(xtFile);
5603 08 Apr 11 nicklas 182     if (m == null) 
5603 08 Apr 11 nicklas 183     {
6520 18 Aug 14 nicklas 184       m = new FileResults(xtFile, oldFileResults.get(xtFile));
5603 08 Apr 11 nicklas 185       fileResults.put(xtFile, m);
6372 06 Dec 13 nicklas 186       oldFileResults.put(xtFile, m);
7233 17 Nov 16 nicklas 187       if (xtFile.hasError())
7233 17 Nov 16 nicklas 188       {
7233 17 Nov 16 nicklas 189         hasError = true;
7233 17 Nov 16 nicklas 190         numErrorFiles++;
7233 17 Nov 16 nicklas 191         m.hasError = true;
7233 17 Nov 16 nicklas 192       }
5603 08 Apr 11 nicklas 193     }
5603 08 Apr 11 nicklas 194     m.status = status;
5603 08 Apr 11 nicklas 195   }
5603 08 Apr 11 nicklas 196   
5603 08 Apr 11 nicklas 197   /**
5602 07 Apr 11 nicklas 198     Adds a detailed message indicating a successful operation 
5602 07 Apr 11 nicklas 199     to a file.
5602 07 Apr 11 nicklas 200     @param xtFile The file to add the message to
5602 07 Apr 11 nicklas 201     @param message The message
5602 07 Apr 11 nicklas 202     @see #addErrorMessage(ExtensionsFile, String)
5602 07 Apr 11 nicklas 203   */
5602 07 Apr 11 nicklas 204   public void addMessage(ExtensionsFile xtFile, String message)
5602 07 Apr 11 nicklas 205   {
5602 07 Apr 11 nicklas 206     addMessage(xtFile, message, false);
5602 07 Apr 11 nicklas 207   }
5602 07 Apr 11 nicklas 208
5602 07 Apr 11 nicklas 209   /**
5602 07 Apr 11 nicklas 210     Adds a detailed message inidcating a failed operation 
5602 07 Apr 11 nicklas 211     to a file.
5602 07 Apr 11 nicklas 212     @param xtFile The file to add the message to
5602 07 Apr 11 nicklas 213     @param message The message
5602 07 Apr 11 nicklas 214   */
5602 07 Apr 11 nicklas 215   public void addErrorMessage(ExtensionsFile xtFile, String message)
5602 07 Apr 11 nicklas 216   {
5602 07 Apr 11 nicklas 217     addMessage(xtFile, message, true);
5602 07 Apr 11 nicklas 218   }
5602 07 Apr 11 nicklas 219
5602 07 Apr 11 nicklas 220   private void addMessage(ExtensionsFile xtFile, String message, boolean error)
5602 07 Apr 11 nicklas 221   {
5602 07 Apr 11 nicklas 222     FileResults m = fileResults.get(xtFile);
5602 07 Apr 11 nicklas 223     if (m == null) 
5602 07 Apr 11 nicklas 224     {
6520 18 Aug 14 nicklas 225       m = new FileResults(xtFile, oldFileResults.get(xtFile));
5602 07 Apr 11 nicklas 226       fileResults.put(xtFile, m);
6372 06 Dec 13 nicklas 227       oldFileResults.put(xtFile, m);
5602 07 Apr 11 nicklas 228     }
5602 07 Apr 11 nicklas 229     m.messages.add(message);
5602 07 Apr 11 nicklas 230     if (error) 
5602 07 Apr 11 nicklas 231     {
5602 07 Apr 11 nicklas 232       if (!m.hasError) numErrorFiles++;
5602 07 Apr 11 nicklas 233       hasError = true;
5602 07 Apr 11 nicklas 234       m.hasError = true;
5602 07 Apr 11 nicklas 235       m.status = "Error";
5602 07 Apr 11 nicklas 236     }
5602 07 Apr 11 nicklas 237   }
5602 07 Apr 11 nicklas 238   
5602 07 Apr 11 nicklas 239   /**
5602 07 Apr 11 nicklas 240     Scan results for a single XML or JAR file.
5602 07 Apr 11 nicklas 241   
5602 07 Apr 11 nicklas 242   */
5602 07 Apr 11 nicklas 243   public static class FileResults
5602 07 Apr 11 nicklas 244   {
5602 07 Apr 11 nicklas 245     
5602 07 Apr 11 nicklas 246     private final ExtensionsFile xtFile;
6372 06 Dec 13 nicklas 247     private final long time;
5602 07 Apr 11 nicklas 248     List<String> messages;
5602 07 Apr 11 nicklas 249     boolean hasError = false;
5602 07 Apr 11 nicklas 250     String status = null;
5602 07 Apr 11 nicklas 251
6520 18 Aug 14 nicklas 252     FileResults(ExtensionsFile xtFile, FileResults old)
5602 07 Apr 11 nicklas 253     {
5602 07 Apr 11 nicklas 254       this.xtFile = xtFile;
6372 06 Dec 13 nicklas 255       this.time = System.currentTimeMillis();
5602 07 Apr 11 nicklas 256       this.messages = new LinkedList<String>();
6520 18 Aug 14 nicklas 257       if (old != null)
6520 18 Aug 14 nicklas 258       {
6520 18 Aug 14 nicklas 259         hasError = old.hasError;
6520 18 Aug 14 nicklas 260         status = old.status;
6520 18 Aug 14 nicklas 261         messages.addAll(old.messages);
6520 18 Aug 14 nicklas 262       }
5602 07 Apr 11 nicklas 263     }
5602 07 Apr 11 nicklas 264     
5602 07 Apr 11 nicklas 265     public ExtensionsFile getExtensionsFile()
5602 07 Apr 11 nicklas 266     {
5602 07 Apr 11 nicklas 267       return xtFile;
5602 07 Apr 11 nicklas 268     }
5602 07 Apr 11 nicklas 269     
5602 07 Apr 11 nicklas 270     /**
6372 06 Dec 13 nicklas 271       Get the time of the results as a millisecond value.
6372 06 Dec 13 nicklas 272       @since 3.2.4
6372 06 Dec 13 nicklas 273     */
6372 06 Dec 13 nicklas 274     public long getTime()
6372 06 Dec 13 nicklas 275     {
6372 06 Dec 13 nicklas 276       return time;
6372 06 Dec 13 nicklas 277     }
6372 06 Dec 13 nicklas 278     
6372 06 Dec 13 nicklas 279     /**
5602 07 Apr 11 nicklas 280       If there was an error in this file or not.
5602 07 Apr 11 nicklas 281       @return TRUE if there was an error, FALSE if successful
5602 07 Apr 11 nicklas 282     */
5602 07 Apr 11 nicklas 283     public boolean hasError()
5602 07 Apr 11 nicklas 284     {
5602 07 Apr 11 nicklas 285       return hasError;
5602 07 Apr 11 nicklas 286     }
5602 07 Apr 11 nicklas 287     
5602 07 Apr 11 nicklas 288     /**
5602 07 Apr 11 nicklas 289       A short status message indicating the completed
5602 07 Apr 11 nicklas 290       results on this file.
5602 07 Apr 11 nicklas 291       @see #getMessages()
5602 07 Apr 11 nicklas 292     */
5602 07 Apr 11 nicklas 293     public String getStatus()
5602 07 Apr 11 nicklas 294     {
5602 07 Apr 11 nicklas 295       return status;
5602 07 Apr 11 nicklas 296     }
5602 07 Apr 11 nicklas 297     
5602 07 Apr 11 nicklas 298     /**
5602 07 Apr 11 nicklas 299       A list of detailed messages, indicating the results of
5602 07 Apr 11 nicklas 300       individual operation on this file.
5602 07 Apr 11 nicklas 301     */
5602 07 Apr 11 nicklas 302     public List<String> getMessages()
5602 07 Apr 11 nicklas 303     {
5602 07 Apr 11 nicklas 304       return messages;
5602 07 Apr 11 nicklas 305     }
5602 07 Apr 11 nicklas 306     
5602 07 Apr 11 nicklas 307   }
5602 07 Apr 11 nicklas 308
5602 07 Apr 11 nicklas 309 }