File: loader.R

package info (click to toggle)
rjava 0.9-3-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 3,196 kB
  • sloc: java: 7,733; ansic: 4,947; sh: 2,878; makefile: 137; perl: 33
file content (64 lines) | stat: -rw-r--r-- 2,086 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
.jaddClassPath <- function(path) {
    if (!length(path)) return(invisible(NULL))
    if (!is.jnull(.rJava.class.loader))
        invisible(.jcall(.rJava.class.loader,"V","addClassPath",as.character(path)))
    else {
        cpr <- try(.jmergeClassPath(paste(path,collapse=.Platform$path.sep)), silent=TRUE)
        invisible(!inherits(cpr, "try-error"))
    }
}

.jclassPath <- function() {
    if (is.jnull(.rJava.class.loader)) {
        cp <- .jcall("java/lang/System", "S", "getProperty", "java.class.path")
        unlist(strsplit(cp, .Platform$path.sep))
    } else {
        .jcall(.rJava.class.loader,"[Ljava/lang/String;","getClassPath")
    }
}

.jaddLibrary <- function(name, path) {
    if (!is.jnull(.rJava.class.loader))
        invisible(.jcall(.rJava.class.loader, "V", "addRLibrary", as.character(name)[1], as.character(path)[1]))
}

.jrmLibrary <- function(name) {
  ## FIXME: unimplemented
}

.jclassLoader <- function() {
    .rJava.class.loader
}

.jpackage <- function(name, jars='*', morePaths='', nativeLibrary=FALSE, lib.loc=NULL) {
  if (!.jniInitialized) .jinit()
  classes <- system.file("java", package=name, lib.loc=lib.loc)
  if (nchar(classes)) {
    .jaddClassPath(classes)
    if (length(jars)) {
      if (length(jars)==1 && jars=='*') {
        jars <- grep(".*\\.jar",list.files(classes,full.names=TRUE),TRUE,value=TRUE)
        if (length(jars)) .jaddClassPath(jars)
      } else .jaddClassPath(paste(classes,jars,sep=.Platform$file.sep))
    }
  }  
  if (any(nchar(morePaths))) {
    cl <- as.character(morePaths)
    cl <- cl[nchar(cl)>0]
    .jaddClassPath(cl)
  }
  if (is.logical(nativeLibrary)) {
    if (nativeLibrary) {
      libs <- "libs"
      if (nchar(.Platform$r_arch)) lib <- file.path("libs", .Platform$r_arch)
      lib <- system.file(libs, paste(name, .Platform$dynlib.ext, sep=''), package=name, lib.loc=lib.loc)
      if (nchar(lib))
        .jaddLibrary(name, lib)
      else
        warning("Native library for `",name,"' could not be found.")
    }
  } else {
    .jaddLibrary(name, nativeLibrary)
  }
  invisible(TRUE)
}