Loading go-packages/meep-model/model.go +249 −200 Original line number Diff line number Diff line Loading @@ -441,6 +441,34 @@ func (m *Model) AddScenarioNode(node *dataModel.ScenarioNode) (err error) { // Add element based on type if isPhyLoc(node.Type_) { // Physical Location err = m.AddPhyLoc(node, parentNode) if err != nil { return err } } else if isProc(node.Type_) { // Process err = m.AddProcess(node, parentNode) if err != nil { return err } } else { return errors.New("Node type " + node.Type_ + " not supported") } // Refresh node map err = m.parseNodes() if err != nil { return err } // Update scenario err = m.refresh() return err } // AddPhyLoc - Add physical location func (m *Model) AddPhyLoc(node *dataModel.ScenarioNode, parentNode *Node) (err error) { // Get parent Network Location node & context information nl := parentNode.object.(*dataModel.NetworkLocation) Loading @@ -467,7 +495,11 @@ func (m *Model) AddScenarioNode(node *dataModel.ScenarioNode) (err error) { // Add PhyLoc to parent NetLoc nl.PhysicalLocations = append(nl.PhysicalLocations, *pl) } else if isProc(node.Type_) { return nil } // AddProcess - Add process func (m *Model) AddProcess(node *dataModel.ScenarioNode, parentNode *Node) (err error) { // Get parent Physical Location node & context information pl := parentNode.object.(*dataModel.PhysicalLocation) Loading @@ -491,18 +523,6 @@ func (m *Model) AddScenarioNode(node *dataModel.ScenarioNode) (err error) { // Add Proc to parent PhyLoc pl.Processes = append(pl.Processes, *proc) } else { return errors.New("Node type " + node.Type_ + " not supported") } // Refresh node map err = m.parseNodes() if err != nil { log.Error(err.Error()) } // Update scenario err = m.refresh() return nil } Loading @@ -517,6 +537,34 @@ func (m *Model) ModifyScenarioNode(node *dataModel.ScenarioNode) (err error) { // Add element based on type if isPhyLoc(node.Type_) { // Physical Location err = m.ModifyPhyLoc(node) if err != nil { return err } } else if isProc(node.Type_) { // Process err = m.ModifyProcess(node) if err != nil { return err } } else { return errors.New("Node type " + node.Type_ + " not supported") } // Refresh node map err = m.parseNodes() if err != nil { return err } // Update scenario err = m.refresh() return err } // ModifyPhyLoc - Modify physical location func (m *Model) ModifyPhyLoc(node *dataModel.ScenarioNode) (err error) { // Validate Physical Location if node.NodeDataUnion == nil || node.NodeDataUnion.PhysicalLocation == nil { Loading Loading @@ -561,8 +609,11 @@ func (m *Model) ModifyScenarioNode(node *dataModel.ScenarioNode) (err error) { break } } return nil } } else if isProc(node.Type_) { // ModifyProcess - Modify process func (m *Model) ModifyProcess(node *dataModel.ScenarioNode) (err error) { // Validate Process if node.NodeDataUnion == nil || node.NodeDataUnion.Process == nil { Loading Loading @@ -606,55 +657,65 @@ func (m *Model) ModifyScenarioNode(node *dataModel.ScenarioNode) (err error) { break } } return nil } // RemoveScenarioNode - Remove scenario node func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) { m.lock.Lock() defer m.lock.Unlock() if node == nil { return errors.New("node == nil") } // Add element based on type if isPhyLoc(node.Type_) { // Physical Location err = m.RemovePhyLoc(node) if err != nil { return err } } else if isProc(node.Type_) { // Process err = m.RemoveProcess(node) if err != nil { return err } } else { err = errors.New("Node type " + node.Type_ + " not supported") return return errors.New("Node type " + node.Type_ + " not supported") } // Refresh node map err = m.parseNodes() if err != nil { log.Error(err.Error()) return err } // Update scenario err = m.refresh() return } // RemoveScenarioNode - Remove scenario node func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) { m.lock.Lock() defer m.lock.Unlock() if node == nil { err = errors.New("node == nil") return return err } // Add element based on type if isPhyLoc(node.Type_) { // RemovePhyLoc - Remove physical location func (m *Model) RemovePhyLoc(node *dataModel.ScenarioNode) (err error) { // Get node name from request if node.NodeDataUnion == nil || node.NodeDataUnion.PhysicalLocation == nil { err = errors.New("Missing Physical Location") return return errors.New("Missing Physical Location") } nodeName := node.NodeDataUnion.PhysicalLocation.Name // Find node in scenario n := m.nodeMap.FindByName(nodeName) if n == nil { err = errors.New("Element " + nodeName + " not found in scenario " + m.name) return return errors.New("Element " + nodeName + " not found in scenario " + m.name) } // Get parent nl := n.parent.(*dataModel.NetworkLocation) if nl == nil { err = errors.New("Parent node not found in scenario " + m.name) return return errors.New("Parent node not found in scenario " + m.name) } // Get index of PhyLoc to remove Loading @@ -670,27 +731,28 @@ func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) { nl.PhysicalLocations[index] = nl.PhysicalLocations[len(nl.PhysicalLocations)-1] nl.PhysicalLocations = nl.PhysicalLocations[:len(nl.PhysicalLocations)-1] } else if isProc(node.Type_) { return nil } // RemoveProcess - Remove process func (m *Model) RemoveProcess(node *dataModel.ScenarioNode) (err error) { // Get node name from request if node.NodeDataUnion == nil || node.NodeDataUnion.Process == nil { err = errors.New("Missing Process") return return errors.New("Missing Process") } nodeName := node.NodeDataUnion.Process.Name // Find node in scenario n := m.nodeMap.FindByName(nodeName) if n == nil { err = errors.New("Element " + nodeName + " not found in scenario " + m.name) return return errors.New("Element " + nodeName + " not found in scenario " + m.name) } // Get parent pl := n.parent.(*dataModel.PhysicalLocation) if pl == nil { err = errors.New("Parent node not found in scenario " + m.name) return return errors.New("Parent node not found in scenario " + m.name) } // Get index of Process to remove Loading @@ -706,20 +768,7 @@ func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) { pl.Processes[index] = pl.Processes[len(pl.Processes)-1] pl.Processes = pl.Processes[:len(pl.Processes)-1] } else { err = errors.New("Node type " + node.Type_ + " not supported") return } // Refresh node map err = m.parseNodes() if err != nil { log.Error(err.Error()) } // Update scenario err = m.refresh() return return nil } //GetScenarioName - Get the scenario name Loading go-packages/meep-model/validator.go +1 −2 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ const ( const ( REGEX_NAME = `^(([a-z0-9][-a-z0-9.]*)?[a-z0-9])+$` REGEX_FULL_NAME = `^(([a-z0-9][-a-z0-9.]*)?[a-z0-9])+$` REGEX_VARIABLE_NAME = `^(([_a-z0-9A-Z][_-a-z0-9.]*)?[_a-z0-9A-Z])+$` REGEX_MAC_ADDRESS = `^(([_a-f0-9A-F][_-a-f0-9]*)?[_a-f0-9A-F])+$` REGEX_WIRELESS_TYPE_LIST = `^((,\s*)?(wifi|5g|4g|other))+$` Loading Loading @@ -978,7 +977,7 @@ func validateFullName(name string) (err error) { if len(name) > 60 { return errors.New("Full name length exceeds maximum of 60 characters") } matched, err := regexp.MatchString(REGEX_FULL_NAME, name) matched, err := regexp.MatchString(REGEX_NAME, name) if err != nil || !matched { return errors.New("Full name must be lowercase alphanumeric or '-' or '.'") } Loading Loading
go-packages/meep-model/model.go +249 −200 Original line number Diff line number Diff line Loading @@ -441,6 +441,34 @@ func (m *Model) AddScenarioNode(node *dataModel.ScenarioNode) (err error) { // Add element based on type if isPhyLoc(node.Type_) { // Physical Location err = m.AddPhyLoc(node, parentNode) if err != nil { return err } } else if isProc(node.Type_) { // Process err = m.AddProcess(node, parentNode) if err != nil { return err } } else { return errors.New("Node type " + node.Type_ + " not supported") } // Refresh node map err = m.parseNodes() if err != nil { return err } // Update scenario err = m.refresh() return err } // AddPhyLoc - Add physical location func (m *Model) AddPhyLoc(node *dataModel.ScenarioNode, parentNode *Node) (err error) { // Get parent Network Location node & context information nl := parentNode.object.(*dataModel.NetworkLocation) Loading @@ -467,7 +495,11 @@ func (m *Model) AddScenarioNode(node *dataModel.ScenarioNode) (err error) { // Add PhyLoc to parent NetLoc nl.PhysicalLocations = append(nl.PhysicalLocations, *pl) } else if isProc(node.Type_) { return nil } // AddProcess - Add process func (m *Model) AddProcess(node *dataModel.ScenarioNode, parentNode *Node) (err error) { // Get parent Physical Location node & context information pl := parentNode.object.(*dataModel.PhysicalLocation) Loading @@ -491,18 +523,6 @@ func (m *Model) AddScenarioNode(node *dataModel.ScenarioNode) (err error) { // Add Proc to parent PhyLoc pl.Processes = append(pl.Processes, *proc) } else { return errors.New("Node type " + node.Type_ + " not supported") } // Refresh node map err = m.parseNodes() if err != nil { log.Error(err.Error()) } // Update scenario err = m.refresh() return nil } Loading @@ -517,6 +537,34 @@ func (m *Model) ModifyScenarioNode(node *dataModel.ScenarioNode) (err error) { // Add element based on type if isPhyLoc(node.Type_) { // Physical Location err = m.ModifyPhyLoc(node) if err != nil { return err } } else if isProc(node.Type_) { // Process err = m.ModifyProcess(node) if err != nil { return err } } else { return errors.New("Node type " + node.Type_ + " not supported") } // Refresh node map err = m.parseNodes() if err != nil { return err } // Update scenario err = m.refresh() return err } // ModifyPhyLoc - Modify physical location func (m *Model) ModifyPhyLoc(node *dataModel.ScenarioNode) (err error) { // Validate Physical Location if node.NodeDataUnion == nil || node.NodeDataUnion.PhysicalLocation == nil { Loading Loading @@ -561,8 +609,11 @@ func (m *Model) ModifyScenarioNode(node *dataModel.ScenarioNode) (err error) { break } } return nil } } else if isProc(node.Type_) { // ModifyProcess - Modify process func (m *Model) ModifyProcess(node *dataModel.ScenarioNode) (err error) { // Validate Process if node.NodeDataUnion == nil || node.NodeDataUnion.Process == nil { Loading Loading @@ -606,55 +657,65 @@ func (m *Model) ModifyScenarioNode(node *dataModel.ScenarioNode) (err error) { break } } return nil } // RemoveScenarioNode - Remove scenario node func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) { m.lock.Lock() defer m.lock.Unlock() if node == nil { return errors.New("node == nil") } // Add element based on type if isPhyLoc(node.Type_) { // Physical Location err = m.RemovePhyLoc(node) if err != nil { return err } } else if isProc(node.Type_) { // Process err = m.RemoveProcess(node) if err != nil { return err } } else { err = errors.New("Node type " + node.Type_ + " not supported") return return errors.New("Node type " + node.Type_ + " not supported") } // Refresh node map err = m.parseNodes() if err != nil { log.Error(err.Error()) return err } // Update scenario err = m.refresh() return } // RemoveScenarioNode - Remove scenario node func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) { m.lock.Lock() defer m.lock.Unlock() if node == nil { err = errors.New("node == nil") return return err } // Add element based on type if isPhyLoc(node.Type_) { // RemovePhyLoc - Remove physical location func (m *Model) RemovePhyLoc(node *dataModel.ScenarioNode) (err error) { // Get node name from request if node.NodeDataUnion == nil || node.NodeDataUnion.PhysicalLocation == nil { err = errors.New("Missing Physical Location") return return errors.New("Missing Physical Location") } nodeName := node.NodeDataUnion.PhysicalLocation.Name // Find node in scenario n := m.nodeMap.FindByName(nodeName) if n == nil { err = errors.New("Element " + nodeName + " not found in scenario " + m.name) return return errors.New("Element " + nodeName + " not found in scenario " + m.name) } // Get parent nl := n.parent.(*dataModel.NetworkLocation) if nl == nil { err = errors.New("Parent node not found in scenario " + m.name) return return errors.New("Parent node not found in scenario " + m.name) } // Get index of PhyLoc to remove Loading @@ -670,27 +731,28 @@ func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) { nl.PhysicalLocations[index] = nl.PhysicalLocations[len(nl.PhysicalLocations)-1] nl.PhysicalLocations = nl.PhysicalLocations[:len(nl.PhysicalLocations)-1] } else if isProc(node.Type_) { return nil } // RemoveProcess - Remove process func (m *Model) RemoveProcess(node *dataModel.ScenarioNode) (err error) { // Get node name from request if node.NodeDataUnion == nil || node.NodeDataUnion.Process == nil { err = errors.New("Missing Process") return return errors.New("Missing Process") } nodeName := node.NodeDataUnion.Process.Name // Find node in scenario n := m.nodeMap.FindByName(nodeName) if n == nil { err = errors.New("Element " + nodeName + " not found in scenario " + m.name) return return errors.New("Element " + nodeName + " not found in scenario " + m.name) } // Get parent pl := n.parent.(*dataModel.PhysicalLocation) if pl == nil { err = errors.New("Parent node not found in scenario " + m.name) return return errors.New("Parent node not found in scenario " + m.name) } // Get index of Process to remove Loading @@ -706,20 +768,7 @@ func (m *Model) RemoveScenarioNode(node *dataModel.ScenarioNode) (err error) { pl.Processes[index] = pl.Processes[len(pl.Processes)-1] pl.Processes = pl.Processes[:len(pl.Processes)-1] } else { err = errors.New("Node type " + node.Type_ + " not supported") return } // Refresh node map err = m.parseNodes() if err != nil { log.Error(err.Error()) } // Update scenario err = m.refresh() return return nil } //GetScenarioName - Get the scenario name Loading
go-packages/meep-model/validator.go +1 −2 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ const ( const ( REGEX_NAME = `^(([a-z0-9][-a-z0-9.]*)?[a-z0-9])+$` REGEX_FULL_NAME = `^(([a-z0-9][-a-z0-9.]*)?[a-z0-9])+$` REGEX_VARIABLE_NAME = `^(([_a-z0-9A-Z][_-a-z0-9.]*)?[_a-z0-9A-Z])+$` REGEX_MAC_ADDRESS = `^(([_a-f0-9A-F][_-a-f0-9]*)?[_a-f0-9A-F])+$` REGEX_WIRELESS_TYPE_LIST = `^((,\s*)?(wifi|5g|4g|other))+$` Loading Loading @@ -978,7 +977,7 @@ func validateFullName(name string) (err error) { if len(name) > 60 { return errors.New("Full name length exceeds maximum of 60 characters") } matched, err := regexp.MatchString(REGEX_FULL_NAME, name) matched, err := regexp.MatchString(REGEX_NAME, name) if err != nil || !matched { return errors.New("Full name must be lowercase alphanumeric or '-' or '.'") } Loading