diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BiodbObject.R	Thu Mar 02 08:55:00 2017 -0500
@@ -0,0 +1,32 @@
+##########################
+# 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)
+})