Commit fa1088ee authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

review follow-up

parent 68a0ca09
Loading
Loading
Loading
Loading
+249 −200
Original line number Diff line number Diff line
@@ -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)
@@ -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)
@@ -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
}

@@ -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 {
@@ -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 {
@@ -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
@@ -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
@@ -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
+1 −2
Original line number Diff line number Diff line
@@ -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))+$`
@@ -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 '.'")
	}