// Copyright 2017 Baliance. All rights reserved. // // Use of this source code is governed by the terms of the Affero GNU General // Public License version 3.0 as published by the Free Software Foundation and // appearing in the file LICENSE included in the packaging of this file. A // commercial license can be purchased by contacting sales@baliance.com. package wordprocessingml import ( "encoding/xml" "fmt" "log" ) type CT_Odso struct { // UDL Connection String Udl *CT_String // Data Source Table Name Table *CT_String // ODSO Data Source File Path Src *CT_Rel // Column Delimiter for Data Source ColDelim *CT_DecimalNumber // ODSO Data Source Type Type *CT_MailMergeSourceType // First Row of Data Source Contains Column Names FHdr *CT_OnOff // External Data Source to Merge Field Mapping FieldMapData []*CT_OdsoFieldMapData // Reference to Inclusion/Exclusion Data for Data Source RecipientData []*CT_Rel } func NewCT_Odso() *CT_Odso { ret := &CT_Odso{} return ret } func (m *CT_Odso) MarshalXML(e *xml.Encoder, start xml.StartElement) error { e.EncodeToken(start) if m.Udl != nil { seudl := xml.StartElement{Name: xml.Name{Local: "w:udl"}} e.EncodeElement(m.Udl, seudl) } if m.Table != nil { setable := xml.StartElement{Name: xml.Name{Local: "w:table"}} e.EncodeElement(m.Table, setable) } if m.Src != nil { sesrc := xml.StartElement{Name: xml.Name{Local: "w:src"}} e.EncodeElement(m.Src, sesrc) } if m.ColDelim != nil { secolDelim := xml.StartElement{Name: xml.Name{Local: "w:colDelim"}} e.EncodeElement(m.ColDelim, secolDelim) } if m.Type != nil { setype := xml.StartElement{Name: xml.Name{Local: "w:type"}} e.EncodeElement(m.Type, setype) } if m.FHdr != nil { sefHdr := xml.StartElement{Name: xml.Name{Local: "w:fHdr"}} e.EncodeElement(m.FHdr, sefHdr) } if m.FieldMapData != nil { sefieldMapData := xml.StartElement{Name: xml.Name{Local: "w:fieldMapData"}} e.EncodeElement(m.FieldMapData, sefieldMapData) } if m.RecipientData != nil { serecipientData := xml.StartElement{Name: xml.Name{Local: "w:recipientData"}} e.EncodeElement(m.RecipientData, serecipientData) } e.EncodeToken(xml.EndElement{Name: start.Name}) return nil } func (m *CT_Odso) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { // initialize to default lCT_Odso: for { tok, err := d.Token() if err != nil { return err } switch el := tok.(type) { case xml.StartElement: switch el.Name.Local { case "udl": m.Udl = NewCT_String() if err := d.DecodeElement(m.Udl, &el); err != nil { return err } case "table": m.Table = NewCT_String() if err := d.DecodeElement(m.Table, &el); err != nil { return err } case "src": m.Src = NewCT_Rel() if err := d.DecodeElement(m.Src, &el); err != nil { return err } case "colDelim": m.ColDelim = NewCT_DecimalNumber() if err := d.DecodeElement(m.ColDelim, &el); err != nil { return err } case "type": m.Type = NewCT_MailMergeSourceType() if err := d.DecodeElement(m.Type, &el); err != nil { return err } case "fHdr": m.FHdr = NewCT_OnOff() if err := d.DecodeElement(m.FHdr, &el); err != nil { return err } case "fieldMapData": tmp := NewCT_OdsoFieldMapData() if err := d.DecodeElement(tmp, &el); err != nil { return err } m.FieldMapData = append(m.FieldMapData, tmp) case "recipientData": tmp := NewCT_Rel() if err := d.DecodeElement(tmp, &el); err != nil { return err } m.RecipientData = append(m.RecipientData, tmp) default: log.Printf("skipping unsupported element on CT_Odso %v", el.Name) if err := d.Skip(); err != nil { return err } } case xml.EndElement: break lCT_Odso case xml.CharData: } } return nil } // Validate validates the CT_Odso and its children func (m *CT_Odso) Validate() error { return m.ValidateWithPath("CT_Odso") } // ValidateWithPath validates the CT_Odso and its children, prefixing error messages with path func (m *CT_Odso) ValidateWithPath(path string) error { if m.Udl != nil { if err := m.Udl.ValidateWithPath(path + "/Udl"); err != nil { return err } } if m.Table != nil { if err := m.Table.ValidateWithPath(path + "/Table"); err != nil { return err } } if m.Src != nil { if err := m.Src.ValidateWithPath(path + "/Src"); err != nil { return err } } if m.ColDelim != nil { if err := m.ColDelim.ValidateWithPath(path + "/ColDelim"); err != nil { return err } } if m.Type != nil { if err := m.Type.ValidateWithPath(path + "/Type"); err != nil { return err } } if m.FHdr != nil { if err := m.FHdr.ValidateWithPath(path + "/FHdr"); err != nil { return err } } for i, v := range m.FieldMapData { if err := v.ValidateWithPath(fmt.Sprintf("%s/FieldMapData[%d]", path, i)); err != nil { return err } } for i, v := range m.RecipientData { if err := v.ValidateWithPath(fmt.Sprintf("%s/RecipientData[%d]", path, i)); err != nil { return err } } return nil }