src/Tools/jEdit/src/isabelle_session.scala
author wenzelm
Wed, 30 Jan 2019 16:44:29 +0100
changeset 69762 58fb0d779583
child 69763 4b0a11d499e2
permissions -rw-r--r--
support for session information via virtual file-system;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69762
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/isabelle_session.scala
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     3
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     4
Access Isabelle session information via virtual file-system.
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     5
*/
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     6
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     8
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
     9
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    10
import isabelle._
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    11
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    12
import java.awt.Component
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    13
import java.io.InputStream
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    14
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    15
import org.gjt.sp.jedit.View
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    16
import org.gjt.sp.jedit.io.VFSFile
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    17
import org.gjt.sp.jedit.browser.VFSBrowser
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    18
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    19
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    20
object Isabelle_Session
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    21
{
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    22
  /* sessions structure */
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    23
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    24
  def sessions_structure(): Sessions.Structure =
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    25
    JEdit_Sessions.sessions_structure(PIDE.options.value)
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    26
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    27
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    28
  /* virtual file-system */
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    29
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    30
  val vfs_prefix = "isabelle-session:"
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    31
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    32
  class VFS extends Isabelle_VFS(vfs_prefix,
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    33
    read = true, browse = true, low_latency = true, non_awt_session = true)
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    34
  {
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    35
    override def _listFiles(vfs_session: AnyRef, url: String, component: Component): Array[VFSFile] =
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    36
    {
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    37
      explode_url(url, component = component) match {
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    38
        case None => null
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    39
        case Some(elems) =>
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    40
          val sessions = sessions_structure()
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    41
          elems match {
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    42
            case Nil =>
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    43
              sessions.chapters.iterator.map(p => make_entry(p._1, is_dir = true)).toArray
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    44
            case List(chapter) =>
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    45
              sessions.chapters.get(chapter) match {
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    46
                case None => null
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    47
                case Some(infos) =>
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    48
                  infos.map(info => make_entry(chapter + "/" + info.name, is_dir = true)).toArray
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    49
              }
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    50
            case _ => null
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    51
          }
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    52
      }
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    53
    }
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    54
  }
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    55
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    56
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    57
  /* open browser */
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    58
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    59
  def open_browser(view: View)
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    60
  {
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    61
    val path =
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    62
      PIDE.maybe_snapshot(view) match {
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    63
        case None => ""
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    64
        case Some(snapshot) =>
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    65
          val sessions = sessions_structure()
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    66
          val session = PIDE.resources.session_base.theory_qualifier(snapshot.node_name)
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    67
          val chapter = sessions.get(session).getOrElse(Sessions.UNSORTED)
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    68
          chapter + "/" + session
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    69
      }
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    70
    VFSBrowser.browseDirectory(view, vfs_prefix + path)
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    71
  }
58fb0d779583 support for session information via virtual file-system;
wenzelm
parents:
diff changeset
    72
}