~ubuntu-branches/debian/sid/scala/sid

« back to all changes in this revision

Viewing changes to src/library/scala/xml/persistent/CachedFileStorage.scala

  • Committer: Package Import Robot
  • Author(s): Emmanuel Bourg, Mehdi Dogguy, Lucas Satabin, Frank S. Thomas, Emmanuel Bourg
  • Date: 2015-06-05 23:52:59 UTC
  • mfrom: (1.2.11)
  • Revision ID: package-import@ubuntu.com-20150605235259-wk00vgk83dh8o19g
Tags: 2.10.5-1
* Team upload.

[ Mehdi Dogguy ]
* New upstream release (Closes: #744278).

[ Lucas Satabin ]
* Update patches
* Update the clean target
* Update paths of elements to install
* Update watch file

[ Frank S. Thomas ]
* Remove myself from Uploaders.

[ Emmanuel Bourg ]
* The package has been adopted by the Java Team (Closes: #754935)
* Patched the build to avoid downloading libraries from the Internet
* Replaced the minified JavaScript files with unobfuscated ones
* No longer build scala-partest.jar until diffutils is packaged or replaced
* debian/watch: Fixed the versions matched (x.y.z instead of x.y.z..z)
* debian/rules:
  - Added the missing get-orig-source target (Closes: #724704)
  - Improved the clean target
* debian/control:
  - Build depend on scala (>= 2.10) and bnd
  - Use canonical URLs for the Vcs-* fields
  - Standards-Version updated to 3.9.6 (no changes)
* Switch to debhelper level 9

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*                     __                                               *\
2
2
**     ________ ___   / /  ___     Scala API                            **
3
 
**    / __/ __// _ | / /  / _ |    (c) 2002-2011, LAMP/EPFL             **
 
3
**    / __/ __// _ | / /  / _ |    (c) 2002-2013, LAMP/EPFL             **
4
4
**  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **
5
5
** /____/\___/_/ |_/____/_/ | |                                         **
6
6
**                          |/                                          **
7
7
\*                                                                      */
8
8
 
9
 
 
10
9
package scala.xml
11
10
package persistent
12
11
 
17
16
import scala.util.logging.Logged
18
17
import scala.collection.Iterator
19
18
 
20
 
/** <p>
21
 
 *    Mutable storage of immutable xml trees. Everything is kept in memory,
22
 
 *    with a thread periodically checking for changes and writing to file.
23
 
 *    To ensure atomicity, two files are used, filename1 and '$'+filename1.
24
 
 *    The implementation switches between the two, deleting the older one
25
 
 *    after a complete dump of the database has been written.
26
 
 *  </p>
 
19
/** Mutable storage of immutable xml trees. Everything is kept in memory,
 
20
 *  with a thread periodically checking for changes and writing to file.
 
21
 *
 
22
 *  To ensure atomicity, two files are used, `filename1` and `'$'+filename1`.
 
23
 *  The implementation switches between the two, deleting the older one
 
24
 *  after a complete dump of the database has been written.
27
25
 *
28
26
 *  @author Burak Emir
29
27
 */
31
29
 
32
30
  private val file2 = new File(file1.getParent, file1.getName+"$")
33
31
 
34
 
  /**  either equals file1 or file2, references the next file in which updates will be stored
 
32
  /** Either equals `file1` or `file2`, references the next file in which
 
33
   *  updates will be stored.
35
34
   */
36
35
  private var theFile: File = null
37
36
 
85
84
 
86
85
  /** saves the XML to file */
87
86
  private def save() = if (this.dirty) {
88
 
    log("[save]\ndeleting "+theFile);
89
 
    theFile.delete();
90
 
    log("creating new "+theFile);
91
 
    theFile.createNewFile();
 
87
    log("[save]\ndeleting "+theFile)
 
88
    theFile.delete()
 
89
    log("creating new "+theFile)
 
90
    theFile.createNewFile()
92
91
    val fos = new FileOutputStream(theFile)
93
92
    val c   = fos.getChannel()
94
93
 
97
96
    val w = Channels.newWriter(c, "utf-8")
98
97
    XML.write(w, storageNode, "utf-8", true, null)
99
98
 
100
 
    log("writing to "+theFile);
 
99
    log("writing to "+theFile)
101
100
 
102
101
    w.close
103
102
    c.close
107
106
    log("[save done]")
108
107
  }
109
108
 
110
 
  /** run method of the thread. remember to use start() to start a thread, not run. */
 
109
  /** Run method of the thread. remember to use `start()` to start a thread,
 
110
    * not `run`. */
111
111
  override def run = {
112
 
    log("[run]\nstarting storage thread, checking every "+interval+" ms");
113
 
    while(true) {
114
 
      Thread.sleep( this.interval );
 
112
    log("[run]\nstarting storage thread, checking every "+interval+" ms")
 
113
    while (true) {
 
114
      Thread.sleep( this.interval )
115
115
      save
116
116
    }
117
117
  }
118
118
 
119
 
  /** forces writing of contents to the file, even if there has not been any update. */
 
119
  /** Force writing of contents to the file, even if there has not been any
 
120
    * update. */
120
121
  def flush() = {
121
 
    this.dirty = true;
 
122
    this.dirty = true
122
123
    save
123
124
  }
124
125
}
125