## ----echo=FALSE---------------------------------------------------------------
library(BiocStyle)
self <- Biocpkg("alabaster.base");
knitr::opts_chunk$set(error=FALSE, warning=FALSE, message=FALSE)

## -----------------------------------------------------------------------------
library(S4Vectors)
df <- DataFrame(X=1:10, Y=letters[1:10])
df

## -----------------------------------------------------------------------------
staging <- tempfile()

library(alabaster.base)
quickStageObject(df, staging, "my_favorite_df")

## -----------------------------------------------------------------------------
quickLoadObject(staging, "my_favorite_df")

## -----------------------------------------------------------------------------
tmp <- tempfile()
dir.create(tmp)

# DataFrame method already defined for the stageObject generic:
meta <- stageObject(df, tmp, path="my_df")
str(meta)

# Writing the metadata to file.
invisible(writeMetadata(meta, tmp))

list.files(tmp, recursive=TRUE)

## -----------------------------------------------------------------------------
remeta <- acquireMetadata(tmp, "my_df/simple.csv.gz")
loadObject(remeta, tmp)

## -----------------------------------------------------------------------------
# Creating a nested DF to be a little spicy:
df2 <- DataFrame(Z=factor(1:5), AA=I(DataFrame(B=runif(5), C=rnorm(5))))

meta2 <- stageObject(df2, tmp, path="my_df2")
list.files(tmp, recursive=TRUE)

## -----------------------------------------------------------------------------
meta2$path
new.dir <- tempfile()
dir.create(new.dir)
invisible(file.copy(tmp, new.dir, recursive=TRUE))
loadObject(meta2, file.path(new.dir, basename(tmp)))

## -----------------------------------------------------------------------------
# Writing the metadata to file.
invisible(writeMetadata(meta, dir=tmp))
invisible(writeMetadata(meta2, dir=tmp))

# Reading a snippet.
meta.path <- file.path(tmp, paste0(meta$path, ".json"))
cat(head(readLines(meta.path), 20), sep="\n")

## -----------------------------------------------------------------------------
meta.fail <- meta
meta.fail[["data_frame"]][["columns"]] <- NULL
try(writeMetadata(meta.fail, dir=tmp))

## -----------------------------------------------------------------------------
re.read <- acquireMetadata(tmp, "my_df2/simple.csv.gz")
loadObject(re.read, tmp)

## -----------------------------------------------------------------------------
sessionInfo()