View Javadoc

1   /*
2    * Copyright (c) 2009 QOS.ch All rights reserved.
3    * 
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   * 
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   * 
14   * THE SOFTWARE IS PROVIDED "AS  IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  package ch.qos.cal10n.util;
23  
24  import java.io.File;
25  import java.io.IOException;
26  import java.io.InputStream;
27  import java.util.PropertyResourceBundle;
28  import java.util.ResourceBundle;
29  
30  public class CAL10NPropertyResourceBundle extends PropertyResourceBundle {
31  
32    static long CHECK_DELAY = 10 * 60 * 1000; // 10 minutes delay
33  
34    File hostFile;
35    volatile long nextCheck;
36    long lastModified;
37  
38    public CAL10NPropertyResourceBundle(InputStream is, File file)
39        throws IOException {
40      super(is);
41      this.hostFile = file;
42      nextCheck = System.currentTimeMillis() + CHECK_DELAY;
43    }
44  
45    public void setParent(ResourceBundle parent) {
46      super.setParent(parent);
47    }
48  
49    public boolean hasChanged() {
50      // if the host file is unknown, no point in a check
51      if (hostFile == null) {
52        return false;
53      }
54  
55      long now = System.currentTimeMillis();
56      if (now < nextCheck) {
57        return false;
58      } else {
59        nextCheck = now + CHECK_DELAY;
60        if (lastModified != hostFile.lastModified()) {
61          lastModified = hostFile.lastModified();
62          return true;
63        } else {
64          return false;
65        }
66      }
67    }
68  
69    /**
70     * WARNING: Used for testing purposes. Do not invoke directly in user code.
71     */
72    public void resetCheckTimes() {
73      nextCheck = 0;
74      lastModified = 0;
75    }
76  }