Improved doc
This commit is contained in:
@@ -564,9 +564,9 @@ func FindSliceInSlice(slice1 []string, slice2 []string) (int, int, bool) {
|
||||
return -1, -1, false
|
||||
}
|
||||
|
||||
func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, err error, issues []error) {
|
||||
func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (returned_wf *Workflow, err error, issues []error) {
|
||||
|
||||
ret = &Workflow{}
|
||||
returned_wf = &Workflow{}
|
||||
|
||||
// When we will iterate over the full array of cells, we first will register the resources
|
||||
// and after the linkage between them
|
||||
@@ -574,6 +574,18 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
return xmlmodel.Root.MxCell[i].RID != nil
|
||||
})
|
||||
|
||||
// For each cell of the xml graph,
|
||||
// in the case cell has a rID retrieve its rType from the value of rID of the componant in the worfklow
|
||||
// retrieve the componant's type
|
||||
// create an object from the rType
|
||||
// update the existing workflow with the new componant
|
||||
// or by defautlt : the cell represents an arrow
|
||||
// if the source or the target of the arrow is a datacenter
|
||||
// define which end of the arrow is the DC
|
||||
// if the other other end of the arrow is a computing component
|
||||
// create a computing object
|
||||
// attach the DC to it
|
||||
// update the workflow with the object : create the list of this type of component or update the list with the id of the component with the object
|
||||
for _, cell := range xmlmodel.Root.MxCell {
|
||||
|
||||
switch {
|
||||
@@ -595,10 +607,11 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
nil
|
||||
}
|
||||
|
||||
resObj := ret.CreateResourceObject(rType)
|
||||
resObj := returned_wf.CreateResourceObject(rType)
|
||||
resObj.setReference(rIDObj)
|
||||
|
||||
ret.UpdateObj(resObj, cell.ID)
|
||||
returned_wf.UpdateObj(resObj, cell.ID)
|
||||
|
||||
case cell.ID == "0" || cell.ID == "1":
|
||||
// ID 0 and 1 are special cases of mxeditor
|
||||
continue
|
||||
@@ -606,8 +619,8 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
|
||||
default:
|
||||
// Not root nor resource. Should be only links
|
||||
sourceObj := ret.GetResource(cell.Source)
|
||||
targetObj := ret.GetResource(cell.Target)
|
||||
sourceObj := returned_wf.GetResource(cell.Source)
|
||||
targetObj := returned_wf.GetResource(cell.Target)
|
||||
|
||||
if sourceObj == nil || targetObj == nil {
|
||||
if sourceObj == nil && targetObj == nil {
|
||||
@@ -633,18 +646,18 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
datacenterLinked = cell.Source
|
||||
}
|
||||
|
||||
switch ret.GetResource(datacenterLinked).getRtype() {
|
||||
switch returned_wf.GetResource(datacenterLinked).getRtype() {
|
||||
case rtype.COMPUTING:
|
||||
computingObj := ret.GetResource(datacenterLinked).(*ComputingObject)
|
||||
computingObj := returned_wf.GetResource(datacenterLinked).(*ComputingObject)
|
||||
|
||||
// We should always get a ID because we already registered resources and discarded which doesn't correspond to existent models
|
||||
computingObj.DataCenterID = *datacenter
|
||||
ret.UpdateObj(computingObj, *datacenterLinked)
|
||||
returned_wf.UpdateObj(computingObj, *datacenterLinked)
|
||||
}
|
||||
|
||||
} else {
|
||||
targetObj.addLink(INPUT, *cell.Source)
|
||||
ret.UpdateObj(targetObj, *cell.Target) // save back
|
||||
returned_wf.UpdateObj(targetObj, *cell.Target) // save back
|
||||
|
||||
// If we have a relationship of:
|
||||
// Source ----> Target
|
||||
@@ -653,7 +666,7 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
// But we also must make sure that the Target will be in the OUTPUTs of the Source
|
||||
|
||||
sourceObj.addLink(OUTPUT, *cell.Target)
|
||||
ret.UpdateObj(sourceObj, *cell.Source)
|
||||
returned_wf.UpdateObj(sourceObj, *cell.Source)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -663,7 +676,9 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
dataslist := make(map[string]bool)
|
||||
// datalist := make(map[string]bool)
|
||||
|
||||
for _, comp := range ret.Computing {
|
||||
|
||||
// Test wether the computing componants are linked with a DC
|
||||
for _, comp := range returned_wf.Computing {
|
||||
if comp.DataCenterID == "" {
|
||||
issues = append(issues, errors.New("Computing "+*comp.getName()+" without a Datacenter"))
|
||||
} else {
|
||||
@@ -673,14 +688,14 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
}
|
||||
|
||||
for _, dcin := range comp.Inputs {
|
||||
switch ret.GetResource(&dcin).getRtype() {
|
||||
switch returned_wf.GetResource(&dcin).getRtype() {
|
||||
case rtype.DATA:
|
||||
dataslist[dcin] = true
|
||||
}
|
||||
}
|
||||
|
||||
for _, dcout := range comp.Outputs {
|
||||
switch ret.GetResource(&dcout).getRtype() {
|
||||
switch returned_wf.GetResource(&dcout).getRtype() {
|
||||
case rtype.DATA:
|
||||
dataslist[dcout] = true
|
||||
}
|
||||
@@ -688,23 +703,23 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
|
||||
}
|
||||
|
||||
for _, va := range ret.Storage {
|
||||
if va.Inputs == nil && va.Outputs == nil {
|
||||
issues = append(issues, errors.New("Storage "+*va.getName()+" without compatible inputs and outputs"))
|
||||
for _, storage_component := range returned_wf.Storage {
|
||||
if storage_component.Inputs == nil && storage_component.Outputs == nil {
|
||||
issues = append(issues, errors.New("Storage "+*storage_component.getName()+" without compatible inputs and outputs"))
|
||||
}
|
||||
}
|
||||
|
||||
for dcID, va := range ret.Datacenter {
|
||||
for dcID, dc_component := range returned_wf.Datacenter {
|
||||
// if rID doesn't exist in the list, it means that it's not used
|
||||
if _, ok := dcslist[dcID]; !ok {
|
||||
issues = append(issues, errors.New("DC "+*va.getName()+" not atached to any Computing"))
|
||||
issues = append(issues, errors.New("DC "+*dc_component.getName()+" not atached to any Computing"))
|
||||
}
|
||||
}
|
||||
|
||||
for dcID, va := range ret.Data {
|
||||
for dcID, data_component := range returned_wf.Data {
|
||||
// if rID doesn't exist in the list, it means that it's not used
|
||||
if _, ok := dataslist[dcID]; !ok {
|
||||
issues = append(issues, errors.New("Data "+*va.getName()+" not atached to any Computing"))
|
||||
issues = append(issues, errors.New("Data "+*data_component.getName()+" not atached to any Computing"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -722,7 +737,7 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
// inputs AND Comp2 inputs with Comp1 outputs, since we are
|
||||
// iterating over all existent Computing models in the Graph
|
||||
|
||||
for _, comp := range ret.Computing {
|
||||
for _, comp := range returned_wf.Computing {
|
||||
|
||||
compModel, err2 := comp.getModel()
|
||||
if err = err2; err != nil {
|
||||
@@ -744,7 +759,7 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
|
||||
//TODO: We should allow heterogenous inputs?
|
||||
for _, objIn := range comp.Inputs {
|
||||
resIn := ret.GetResource(&objIn)
|
||||
resIn := returned_wf.GetResource(&objIn)
|
||||
resInType := resIn.getRtype()
|
||||
switch resInType {
|
||||
case rtype.DATA:
|
||||
@@ -781,7 +796,7 @@ func (w Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (ret *Workflow, er
|
||||
|
||||
//TODO: We should allow heterogenous outputs?
|
||||
for _, objOut := range comp.Outputs {
|
||||
resOut := ret.GetResource(&objOut)
|
||||
resOut := returned_wf.GetResource(&objOut)
|
||||
resOutType := resOut.getRtype()
|
||||
switch resOutType {
|
||||
case rtype.COMPUTING:
|
||||
|
||||
Reference in New Issue
Block a user