view BiodbObject.R @ 2:20d69a062da3 draft

planemo upload for repository https://github.com/workflow4metabolomics/lcmsmatching.git commit d4048accde6bdfd5b3e14f5394902d38991854f8
author prog
date Thu, 02 Mar 2017 08:55:00 -0500
parents
children
line wrap: on
line source

##########################
# CLASS DECLARATION {{{1 #
##########################

BiodbObject <- methods::setRefClass("BiodbObject", fields = list( .observers = "ANY" ))

########################
# ABSTRACT METHOD {{{1 #
########################

BiodbObject$methods( .abstract.method = function() {

	class <- class(.self)
	method <- sys.call(length(sys.calls()) - 1)
	method <- sub('^[^$]*\\$([^(]*)\\(.*$', '\\1()', method)

	stop(paste("Method", method, "is not implemented in", class, "class."))
})

######################
# ADD OBSERVERS {{{1 #
######################

BiodbObject$methods( addObservers = function(obs) {

	# Check types of observers
	if ( ( ! is.list(obs) && ! inherits(obs, "BiodbObserver")) || (is.list(obs) && any( ! vapply(obs, function(o) inherits(o, "BiodbObserver"), FUN.VALUE = TRUE))))
		stop("Observers must inherit from BiodbObserver class.")

	# Add observers to current list
	.observers <<- if (is.null(.self$.observers)) c(obs) else c(.self$.observers, obs)
})