# strJson = '{"type":"union","id":"main","relations":[{"type":"relation","id":"relation1"},{"type":"relation","id":"relation2"}]}'
# u2 = UnionRelation$new(json=jsonlite::fromJSON(strJson, simplifyVector = FALSE))
# strJson = '{"type":"composite","id":"fc80a6f0-2520-11e6-a90d-c538b190e4a2","mainRelation":{"type":"union","id":"main","relations":[{"type":"relation","id":"mainTable1"},{"type":"relation","id":"mainTable2"}]},"joinOperators":[{"type":"join","rightRelation":{"type":"relation","id":"5"},"leftPair":{"lColumns":["main.sex","main.country"],"rColumns":["5._sex","5._country"]}}]}'
# relationFromJson(jsonlite::fromJSON(strJson, simplifyVector = FALSE))
#' relationFromJson
#'
#' @export
relationFromJson = function(json){
type = json$type
if (type == 'relation'){
return (SimpleRelation$new(json=json))
} else if (type == 'union'){
return (UnionRelation$new(json=json))
} else if (type == 'composite'){
return (CompositeRelation$new(json=json))
} else if (type == 'rename'){
return (RenameRelation$new(json=json))
} else if (type == 'pairwise'){
return (PairWiseRelation$new(json=json))
} else {
stop(paste0('relationFromJson : unknown type ', type))
}
}
#' joinOperatorFromJson
#'
#' @export
joinOperatorFromJson = function(json){
type = json$type
if (type == 'join'){
return (JoinOperator1$new(json=json))
} else if (type == 'melt'){
return (JoinMeltOperator$new(json=json))
} else {
stop(paste0('joinOperatorFromJson : unknown type ', type))
}
}
#' SimpleRelation
#'
#' @export
SimpleRelation <- R6Class(
'SimpleRelation',
public = list(
id = NULL,
initialize = function(id=NULL,json=NULL){
self$id =id
if (!is.null(json)){
self$id =as.character(json$id)
}
},
toJson = function(){
return (list(type=unbox('relation'),
id=unbox(self$id)))
},
toTson = function(){
return (list(type=tson.character('relation'),
id=tson.character(self$id)))
}
)
)
#' RenameRelation
#'
#' @export
RenameRelation <- R6Class(
'RenameRelation',
public = list(
id = NULL,
relation = NULL,
inNames = NULL,
outNames = NULL,
initialize = function(id=NULL, relation=NULL, inNames=NULL, outNames=NULL, json=NULL){
self$id =id
self$relation =relation
self$inNames =inNames
self$outNames =outNames
if (!is.null(json)){
self$id =as.character(json$id)
self$relation =relationFromJson(json$relation)
self$inNames =as.character(json$inNames)
self$outNames =as.character(json$outNames)
}
if (is.null(self$relation)) stop('relation is null')
if (is.null(self$inNames)) stop('inNames is null')
if (is.null(self$outNames)) stop('outNames is null')
},
toJson = function(){
return (list(type=unbox('rename'),
id=unbox(self$id),
relation=self$relation$toJson(),
inNames=self$inNames,
outNames=self$outNames))
},
toTson = function(){
return (list(type=tson.character('rename'),
id=tson.character(self$id),
relation=self$relation$toTson(),
inNames=self$inNames,
outNames=self$outNames))
}
)
)
#' UnionRelation
#'
#' @export
UnionRelation <- R6Class(
'UnionRelation',
public = list(
id = NULL,
relations = NULL,
initialize = function(id=NULL,relations=NULL,json=NULL){
self$id =id
self$relations =relations
if (!is.null(json)){
self$id =as.character(json$id)
self$relations=lapply(json$relations, relationFromJson)
}
},
toJson = function(){
return (list(type=unbox('union'),
id=unbox(self$id),
relations=lapply(self$relations, function(each) each$toJson())))
},
toTson = function(){
return (list(type=tson.character('union'),
id=tson.character(self$id),
relations=lapply(self$relations, function(each) each$toTson())))
}
)
)
#'
#' @export
GroupByRelation <- R6Class(
'GroupByRelation',
public = list(
id = NULL,
relation = NULL,
group = NULL,
initialize = function(id=NULL,relation=NULL,group=NULL,json=NULL){
self$id =id
self$relation =relation
self$group =group
if (!is.null(json)){
self$id =as.character(json$id)
self$group =as.character(json$group)
self$relation=relationFromJson(json$relation)
}
},
toJson = function(){
return (list(type=unbox('group'),
id=unbox(self$id),
group=I(self$group),
relation=self$relation$toJson()))
},
toTson = function(){
return (list(type=tson.character('group'),
id=tson.character(self$id),
group=self$group,
relation=self$relation$toTson()))
}
)
)
#'
#' @export
PairWiseRelation <- R6Class(
'PairWiseRelation',
public = list(
id = NULL,
relation = NULL,
group = NULL,
prefix = NULL,
isSymetric = NULL,
hasDiagonal = NULL,
initialize = function(id=NULL,relation=NULL,group=NULL,prefix=NULL,isSymetric = TRUE,
hasDiagonal = FALSE,json=NULL){
self$id =id
self$relation =relation
self$group =group
self$prefix =prefix
self$isSymetric =isSymetric
self$hasDiagonal =hasDiagonal
if (!is.null(json)){
self$id = as.character(json$id)
self$group = as.character(json$group)
self$prefix = as.character(json$prefix)
self$isSymetric = as.logical(json$isSymetric)
self$hasDiagonal = as.logical(json$hasDiagonal)
self$relation=relationFromJson(json$relation)
}
},
toJson = function(){
return (list(type=unbox('pairwise'),
id=unbox(self$id),
group=I(self$group),
prefix=unbox(self$prefix),
isSymetric=unbox(self$isSymetric),
hasDiagonal=unbox(self$hasDiagonal),
relation=self$relation$toJson()))
},
toTson = function(){
return (list(type=tson.character('pairwise'),
id=tson.character(self$id),
group=self$group,
prefix=tson.character(self$prefix),
isSymetric=tson.scalar(self$isSymetric),
hasDiagonal=tson.scalar(self$hasDiagonal),
relation=self$relation$toTson()))
}
),
active = list(
pairGroup = function() {
result = removeTablePrefix(self$group)
return(addTablePrefix(self$id, result))
},
idsName = function() {
return(addTablePrefix(self$id, 'ids'))
}
)
)
#' CompositeRelation
#'
#' @export
CompositeRelation <- R6Class(
'CompositeRelation',
public = list(
id = NULL,
mainRelation = NULL,
joinOperators = NULL,
initialize = function(id=NULL,mainRelation=NULL,joinOperators=NULL, json=NULL){
self$id =id
self$mainRelation =mainRelation
self$joinOperators =joinOperators
if (!is.null(json)){
self$id =as.character(json$id)
self$mainRelation=relationFromJson(json$mainRelation)
self$joinOperators=lapply(json$joinOperators, joinOperatorFromJson)
}
},
addJoinOperator = function(jop){
print('addJoinOperator 1')
print(length(self$joinOperators))
list = self$joinOperators
list[[length(list)+1]] = jop
self$joinOperators = list
print('addJoinOperator 2')
print(length(self$joinOperators))
},
toJson = function(){
return (list(type=unbox('composite'),
id=unbox(self$id),
mainRelation=self$mainRelation$toJson(),
joinOperators=lapply(self$joinOperators, function(each) each$toJson())))
},
toTson = function(){
return (list(type=tson.character('composite'),
id=tson.character(self$id),
mainRelation=self$mainRelation$toTson(),
joinOperators=lapply(self$joinOperators, function(each) each$toTson())))
}
)
)
#' ColumnPair
#'
#' @export
ColumnPair <- R6Class(
'ColumnPair',
public = list(
lColumns = NULL,
rColumns = NULL,
initialize = function(lColumns=NULL,rColumns=NULL,json=NULL){
self$lColumns = as.character(lColumns)
self$rColumns = as.character(rColumns)
if (!is.null(json)){
self$lColumns =as.character(json$lColumns)
self$rColumns =as.character(json$rColumns)
}
},
toJson = function(){
return (list(lColumns=I(self$lColumns),
rColumns=I(self$rColumns)))
},
toTson = function(){
return (list(lColumns=self$lColumns,
rColumns=self$rColumns))
}
)
)
#' JoinOperator
#'
#' @export
JoinOperator1 <- R6Class(
'JoinOperator1',
public = list(
leftPair = NULL,
rightRelation = NULL,
initialize = function(rightRelation=NULL, leftPair=NULL,json=NULL){
self$rightRelation =rightRelation
self$leftPair =leftPair
if (!is.null(json)){
self$rightRelation = relationFromJson(json$rightRelation)
self$leftPair = ColumnPair$new(json=json$leftPair)
}
if (is.null(self$rightRelation)) stop('rightRelation is null')
},
toJson = function(){
return (list(type=unbox('join'),
rightRelation=self$rightRelation$toJson(),
leftPair=self$leftPair$toJson()))
},
toTson = function(){
return (list(type=tson.character('join'),
rightRelation=self$rightRelation$toTson(),
leftPair=self$leftPair$toTson()))
}
)
)
#' JoinMeltOperator
#'
#' @export
JoinMeltOperator <- R6Class(
'JoinMeltOperator',
public = list(
rightRelationId = NULL,
names = NULL,
valueName = NULL,
variableName = NULL,
initialize = function(rightRelationId=NULL, names=NULL, valueName=NULL, variableName=NULL ,json=NULL){
self$rightRelationId =rightRelationId
self$names =names
self$valueName =valueName
self$variableName =variableName
if (!is.null(json)){
self$rightRelationId = json$rightRelationId
self$names = as.character(json$names)
self$valueName = json$valueName
self$variableName = json$variableName
}
},
toJson = function(){
return (list(type=unbox('melt'),
rightRelationId=unbox(self$rightRelationId),
names=self$names,
valueName=unbox(self$valueName),
variableName=unbox(self$variableName)
))
},
toTson = function(){
return (list(type=tson.character('melt'),
rightRelationId=tson.character(self$rightRelationId),
names=self$names,
valueName=tson.character(self$valueName),
variableName=tson.character(self$variableName)
))
}
)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.