示例#1
0
func parseSignalGraph(text, context string) (job *PasteJob, ok bool) {
	xmlsg := backend.XmlSignalGraph{}
	_, xmlerr := xmlsg.Read([]byte(text))
	if xmlerr != nil {
		return
	}
	for _, l := range xmlsg.Libraries {
		_, err := global.LibraryMgr().Access(l.Name)
		if err != nil {
			fmt.Printf("parseSignalGraph error: referenced library %s not accessible.\n", l.Name)
			return
		}
	}
	var njob *NewElementJob
	njob = NewElementJobNew(context, eSignalGraph)
	job = PasteJobNew()
	job.context = context
	job.newElements = append(job.newElements, njob)
	for _, xmln := range xmlsg.ProcessingNodes {
		_, validNodeType := freesp.GetNodeTypeByName(xmln.NType)
		if !validNodeType {
			fmt.Printf("parseSignalGraph error: node type %s not registered.\n", xmln.NType)
			return
		}
		njob = NewElementJobNew(context, eNode)
		njob.input[iNodeName] = xmln.NName
		njob.input[iNodeTypeSelect] = xmln.NType
		pj := PasteJobNew()
		pj.newElements = append(pj.newElements, njob)
		job.children = append(job.children, pj)
	}
	for _, xmln := range xmlsg.InputNodes {
		if len(xmln.OutPort) == 0 {
			fmt.Printf("parseSignalGraph error: input node has no outports.\n")
			return
		}
		njob = NewElementJobNew(context, eInputNode)
		njob.input[iInputNodeName] = xmln.NName
		njob.input[iInputTypeSelect] = xmln.OutPort[0].PType // TODO
		pj := PasteJobNew()
		pj.newElements = append(pj.newElements, njob)
		job.children = append(job.children, pj)
	}
	for _, xmln := range xmlsg.OutputNodes {
		if len(xmln.InPort) == 0 {
			fmt.Printf("parseSignalGraph error: output node has no inports.\n")
			return
		}
		njob = NewElementJobNew(context, eOutputNode)
		njob.input[iOutputNodeName] = xmln.NName
		njob.input[iOutputTypeSelect] = xmln.InPort[0].PType // TODO
		pj := PasteJobNew()
		pj.newElements = append(pj.newElements, njob)
		job.children = append(job.children, pj)
	}
	ok = true
	return
}