diff --git a/models/workflow.go b/models/workflow.go index d7b275b..d425b94 100644 --- a/models/workflow.go +++ b/models/workflow.go @@ -678,9 +678,59 @@ func (ws Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (returned_wf *Wor } } - issues = returned_wf.CreateLinks(xmlmodel.Root.MxLink, issues) - issues = returned_wf.CheckLinks(issues) + issues = returned_wf.createLinks(xmlmodel.Root.MxLink, issues) + issues = returned_wf.checkLinks(issues) + // dcslist := make(map[string]bool) + // dataslist := make(map[string]bool) + // // datalist := make(map[string]bool) + + + // // Test wether the computing components 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 { + // // If doesn't exist in the list, means is new element to register as used + // dcslist[comp.DataCenterID] = true + + // } + + // for _, dcin := range comp.Inputs { + // switch returned_wf.GetResource(&dcin).getRtype() { + // case rtype.DATA: + // dataslist[dcin] = true + // } + // } + + // for _, dcout := range comp.Outputs { + // switch returned_wf.GetResource(&dcout).getRtype() { + // case rtype.DATA: + // dataslist[dcout] = true + // } + // } + + // } + + // 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, 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 "+*dc_component.getName()+" not attached to any Computing")) + // } + // } + + // 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 "+*data_component.getName()+" not attached to any Computing")) + // } + // } ////////////////////////////////////////////////////////// // // @@ -783,10 +833,10 @@ func (ws Workspace) ConsumeMxGraphModel(xmlmodel MxGraphModel) (returned_wf *Wor return } -func (w *Workflow) CreateLinks(links []MxLink, issues []error) []error { - - for _, link := range links { - if len(link.Source) > 0 && len(link.Target) > 0 { +func (w *Workflow) createLinks(links []MxLink, issues []error) []error { + + for _, link := range links { + if (len(link.Source) > 0 && len(link.Target) > 0){ sourceObj := w.GetResource(&link.Source) targetObj := w.GetResource(&link.Target) link_object := NewLink(sourceObj, link.Source, targetObj, link.Target) @@ -812,33 +862,33 @@ func (w *Workflow) processLinkErrors(link MxLink) (issue error) { return issue } -func (w *Workflow) CheckLinks(issues []error) []error { - +func (w *Workflow) checkLinks(issues []error) []error { + // Check that storage components have a valid link for id, storage := range w.Storage { - if !w.IsComponentSrc(id) && !w.IsComponentDst(id) { + if(!w.isComponentSrc(id) && !w.isComponentDst(id)){ issues = append(issues, errors.New("Storage "+*storage.getName()+" without compatible inputs and outputs")) } } // Check that data components are linked to a computing component for id, data := range w.Data { - if !w.HasLinkageToComputing(id) { + if(!w.isLinkedToComputing(id)){ issues = append(issues, errors.New("Data "+*data.getName()+" not attached to any Computing")) } } // Check that DC is linked to a computing component - for id, dc := range w.Datacenter { - if !w.HasLinkageToComputing(id) { + for id, dc:= range w.Datacenter { + if(!w.isLinkedToComputing(id)){ issues = append(issues, errors.New("Datacenter "+*dc.getName()+" not attached to any Computing")) } } // Check that all data computing components are linked to a DC - for id, comp := range w.Computing { - if !w.HasLinkageToDC(id) { + for id,comp:= range w.Computing { + if(!w.isLinkedToDC(id)){ issues = append(issues, errors.New("Computing "+*comp.getName()+" not attached to any datacenter")) } @@ -847,10 +897,10 @@ func (w *Workflow) CheckLinks(issues []error) []error { return issues } -func (w *Workflow) IsComponentSrc(id string) bool { - - for _, link := range w.Links { - if link.Source == id && link.Source != "" { +func (w *Workflow) isComponentSrc(id string) bool { + + for _, link := range w.Links{ + if(link.Source == id && link.Source != ""){ return true } } @@ -858,10 +908,10 @@ func (w *Workflow) IsComponentSrc(id string) bool { return false } -func (w *Workflow) IsComponentDst(id string) bool { - - for _, link := range w.Links { - if link.Destination == id && link.Source != "" { +func (w *Workflow) isComponentDst(id string) bool { + + for _, link := range w.Links{ + if(link.Destination == id && link.Source != ""){ return true } } @@ -869,10 +919,10 @@ func (w *Workflow) IsComponentDst(id string) bool { return false } -func (w *Workflow) HasLinkageToComputing(id string) bool { +func (w *Workflow) isLinkedToComputing(id string) bool { for idComputing, _ := range w.Computing { - if (w.IsComponentSrc(id) && w.IsComponentDst(idComputing)) || (w.IsComponentSrc(idComputing) && w.IsComponentDst(id)) { + if( (w.isComponentSrc(id) && w.isComponentDst(idComputing)) || (w.isComponentSrc(idComputing) && w.isComponentDst(id))){ return true } @@ -881,7 +931,7 @@ func (w *Workflow) HasLinkageToComputing(id string) bool { return false } -func (w *Workflow) HasLinkageToDC(id string) bool { +func (w *Workflow) isLinkedToDC(id string) bool { for _, link := range w.Links { if link.Source == id && link.DCLink { @@ -1104,18 +1154,3 @@ func (wf Workflow) mxCellToComponent(cell MxCell, ws Workspace) (resObj Resource return } -// func (ws Workspace) extractMxCell(xmlModel MxGraphModel){ -// // Iterate through all objects of the MxGraph -// graphObjects := xmlModel.Root.MxObject -// for _, object := range(*graphObjects){ -// current_obj_id, _ := strconv.Atoi(object.ID) -// inside_cell_id := strconv.Itoa(current_obj_id + 1) - -// cell := ws.GetResource(&inside_cell_id) -// // component := w.GetResource(cell.RID) -// fmt.Print(cell) -// } -// // Extract the mxCell object -// // Invoke the addParameter method from the component -// // Edit the ID to get the object's one -// }