## ----include=FALSE-------------------------------------------------------
knitr::opts_chunk$set(eval = FALSE)
library("sevenbridges")

## ------------------------------------------------------------------------
#  if (!require("devtools", quietly = TRUE)) install.packages("devtools")
#  install.packages("BiocManager")
#  
#  devtools::install_github(
#    "sbg/sevenbridges-r",
#    repos = BiocManager::repositories(),
#    build_vignettes = TRUE, dependencies = TRUE
#  )

## ------------------------------------------------------------------------
#  browseVignettes(package = "sevenbridges")

## ------------------------------------------------------------------------
#  a <- Auth(token = "your_token", platform = "cgc")

## ------------------------------------------------------------------------
#  a <- Auth(from = "file", profile_name = "cgc")
#  # # remove old project
#  # a$project(id = "tengfei/hackathon")$delete()

## ------------------------------------------------------------------------
#  sbg_set_env("https://cgc-api.sbgenomics.com/v2", "your_token")

## ------------------------------------------------------------------------
#  a <- Auth(from = "env")

## ------------------------------------------------------------------------
#  (b <- a$billing())
#  # a single billing group is showing

## ------------------------------------------------------------------------
#  (p <- a$project_new("hackathon",
#    billing_group_id = b$id,
#    description = "This project is for CGC hackathon"
#  ))

## ------------------------------------------------------------------------
#  # p$delete()

## ---- comment = "", eval = TRUE------------------------------------------
rbx <- Tool(
  id = "runif",
  label = "runif",
  hints = requirements(docker(pull = "rocker/r-base"), cpu(1), mem(2000)),
  baseCommand = "Rscript -e 'runif(100)'",
  stdout = "output.txt",
  outputs = output(id = "random", glob = "*.txt")
)
rbx$toJSON(pretty = TRUE)

## ---- eval = TRUE--------------------------------------------------------
# provide scripts
# make a new script file
fd <- fileDef(
  name = "runif.R",
  content = "set.seed(1); runif(100)"
)
rbx <- Tool(
  id = "runif",
  label = "runif",
  hints = requirements(docker(pull = "rocker/r-base"), cpu(1), mem(2000)),
  requirements = requirements(fd),
  baseCommand = "Rscript runif.R", # run script you created.
  stdout = "output.txt",
  outputs = output(id = "random", glob = "*.txt")
)

## ---- eval = TRUE--------------------------------------------------------
fl <- system.file("docker/rnaseqGene", "Dockerfile",
  package = "sevenbridges"
)

## ----comment='', eval = TRUE---------------------------------------------
cat(readLines(fl), sep = "\n")

## ---- eval = TRUE--------------------------------------------------------
fl <- system.file("docker/rnaseqGene/src", "performDE.R",
  package = "sevenbridges"
)

## ----comment='', eval = TRUE---------------------------------------------
cat(readLines(fl), sep = "\n")

## ---- eval = TRUE--------------------------------------------------------
fl <- system.file("docker/rnaseqGene/report", "rnaseqGene.Rmd",
  package = "sevenbridges"
)

## ----comment = "", eval = TRUE-------------------------------------------
cat(readLines(fl, n = 50), sep = "\n")

## ---- eval = TRUE--------------------------------------------------------
rbx <- Tool(
  id = "rnaseqGene",
  label = "rnaseqgene",
  description = "A RNA-seq Differiencial Expression Flow and Report",
  hints = requirements(docker(pull = "tengfei/rnaseqgene"), cpu(1), mem(2000)),
  baseCommand = "performDE.R",
  inputs = list(
    input(
      id = "bamfiles", label = "bam files",
      description = "a list of bam files",
      type = "File...", ## or type = ItemArray("File")
      prefix = "--bamfiles",
      itemSeparator = ","
    ),
    input(
      id = "design", label = "design matrix",
      type = "File",
      prefix = "--design"
    ),
    input(
      id = "gtffile", label = "gene feature files",
      type = "File",
      prefix = "--gtffile"
    ),
    input(
      id = "format", label = "report foramt html or pdf",
      type = enum("format", c("pdf", "html")),
      prefix = "--format"
    )
  ),
  outputs = list(
    output(
      id = "report", label = "report",
      description = "A reproducible report created by Rmarkdown",
      glob = Expression(
        engine = "#cwl-js-engine",
        script = "x = $job[['inputs']][['format']]; if(x == 'undefined' || x == null){x = 'html';};'rnaseqGene.' +  x"
      )
    ),
    output(
      id = "heatmap", label = "heatmap",
      description = "A heatmap plot to show the Euclidean distance between samples",
      glob = "heatmap.pdf"
    ),
    output(
      id = "count", label = "count",
      description = "Reads counts matrix",
      glob = "count.csv"
    ),
    output(
      id = "de", label = "Differential expression table",
      description = "Differential expression table",
      glob = "de.csv"
    )
  )
)

## ----comment = "", eval = TRUE-------------------------------------------
rbx
rbx$toJSON(pretty = TRUE)
rbx$toJSON()
# # or write to an external file
# fl <- "~/Downloads/rnaseqGene.json"
# write(rbx$toJSON(pretty = TRUE), fl)

## ------------------------------------------------------------------------
#  # add App you just created
#  (rna.app <- p$app_add("rnaseqgene", rbx))

## ------------------------------------------------------------------------
#  fl <- system.file("extdata", "sample1.fastq", package = "sevenbridges")
#  (p <- a$project(id = "tengfei/quickstart"))
#  # by default load .meta for the file
#  p$upload(fl, overwrite = TRUE)
#  # pass metadata
#  p$upload(fl, overwrite = TRUE, metadata = list(library_id = "testid2", platform = "Illumina x11"))
#  # rename
#  p$upload(fl,
#    overwrite = TRUE, name = "sample_new_name.fastq",
#    metadata = list(library_id = "new_id")
#  )
#  
#  # upload folder
#  dir.ext <- system.file("extdata", package = "sevenbridges")
#  p$upload(dir.ext, overwrite = TRUE)
#  
#  # upload file list
#  fls <- list.files(dir.ext, recursive = TRUE, full.names = TRUE)
#  p$upload(fls, overwrite = TRUE)

## ---- comment = "", eval = TRUE------------------------------------------
download.fl <- system.file("extdata/download.txt", package = "sevenbridges")
cat(readLines(download.fl), sep = "\n")

## ------------------------------------------------------------------------
#  td <- tempfile()
#  dir.create(td)
#  for (f in readLines(download.fl)) {
#    download.file(f, file.path(td, basename(f)))
#  }
#  # double check
#  list.files(td)
#  # upload to the project you created
#  p$upload(td)

## ------------------------------------------------------------------------
#  # get file id you need as inout
#  (bamfiles.in <- p$file(".bam"))
#  (design.in <- p$file("sample_table.csv"))
#  (gtf.in <- p$file("Homo_sapiens.GRCh37.75_subset.gtf"))

## ------------------------------------------------------------------------
#  bam1 <- p$file("SRR1039516_subset.bam")
#  bam2 <- p$file("SRR1039512_subset.bam")
#  bamfiles.in2 <- list(bam1, bam2)

## ------------------------------------------------------------------------
#  # add a new Task
#  (tsk <- p$task_add(
#    name = "RNA DE report new",
#    description = "RNA DE analysis report",
#    app = rna.app$id,
#    inputs = list(
#      bamfiles = bamfiles.in,
#      design = design.in,
#      gtffile = gtf.in
#    )
#  ))
#  
#  # don't forget to run a draft task
#  tsk$run()

## ------------------------------------------------------------------------
#  # # monitor the task
#  # tsk$monitor()

## ------------------------------------------------------------------------
#  setTaskHook("completed", function() {
#    tsk$download("~/Downloads")
#  })
#  tsk$monitor()

## ------------------------------------------------------------------------
#  tsk$download("~/Downloads")

## ------------------------------------------------------------------------
#  # batch by items
#  (tsk <- p$task_add(
#    name = "RNA DE report new batch 2",
#    description = "RNA DE analysis report",
#    app = rna.app$id,
#    batch = batch(input = "bamfiles"),
#    inputs = list(
#      bamfiles = bamfiles.in,
#      design = design.in,
#      gtffile = gtf.in
#    )
#  ))
#  
#  # batch by metadata, input files has to have metadata fields specified
#  (tsk <- p$task_add(
#    name = "RNA DE report new batch 3",
#    description = "RNA DE analysis report",
#    app = rna.app$id,
#    batch = batch(
#      input = "fastq",
#      c("metadata.sample_id", "metadata.library_id")
#    ),
#    inputs = list(
#      bamfiles = bamfiles.in,
#      design = design.in,
#      gtffile = gtf.in
#    )
#  ))

## ----comment = "", eval = TRUE-------------------------------------------
fl <- system.file("docker/reporttool/rabix/reporttool.json",
  package = "sevenbridges"
)
cat(readLines(fl), sep = "\n")

## ------------------------------------------------------------------------
#  # directly add json file
#  p <- a$project(id = "tengfei/hackathon")
#  (report.app <- p$app_add("report-tool", fl))

## ----comment = "", eval = TRUE-------------------------------------------
fl <- system.file("docker/reporttool/Dockerfile",
  package = "sevenbridges"
)
cat(readLines(fl), sep = "\n")

## ----comment = "", eval = FALSE------------------------------------------
#  fl <- system.file("docker/reporttool/src/report.R",
#    package = "sevenbriges"
#  )
#  cat(readLines(fl), sep = "\n")

## ----comment = "", eval = FALSE------------------------------------------
#  fl <- system.file("docker/reporttool/rabix/generator.R",
#    package = "sevenbriges"
#  )
#  cat(readLines(fl), sep = "\n")

## ------------------------------------------------------------------------
#  browseVignettes("sevenbridges")

