// TODO: docstring package main import ( "encoding/csv" "fmt" "log" "os" "text/template" "time" ) type frabSchedule struct { Conf conference Days []day } type conference struct { Title string Start string // date (yyyy-mm-dd) End string // date (yyyy-mm-dd) Days int } type day struct { Index int Date string // date (yyyy-mm-dd) Start string // timedate (RFC3339) End string // timedate (RFC3339) Rooms []room } type room struct { Name string Events []event } type event struct { ID int GUID string // autogen UUID Room string Title string Date string // timedate (RFC3339) Start string // time (hh:mm) Duration string // time (hh:mm) Language string Persons []person } type person struct { ID int Name string } func main() { fmt.Println("Conference Schedule: CSV to Frab (Infobeamer) Converter") /* * Data Input */ // read CSV contents csvFile, err := os.Open("schedule.csv") if err != nil { log.Fatal("Error opening CSV file:\n", err) } records, err := csv.NewReader(csvFile).ReadAll() if err != nil { log.Fatal("Error reading CSV file:\n", err) } // omit title row csvRecords := records[1:] fmt.Println(csvRecords) // TODO /* * Data Conversion */ timeDateFormat := "2006-01-02" // timeTimeFormat := "15:04" // new conference cmdTitle := "Test Conference" // TODO: get from command line cmdStart := "2018-11-18" // TODO: get from command line cmdEnd := "2018-11-19" // TODO: get from command line cmdStartTime, _ := time.Parse(timeDateFormat, cmdStart) cmdEndTime, _ := time.Parse(timeDateFormat, cmdEnd) confDurationDays := int(cmdEndTime.Sub(cmdStartTime).Hours()/24) + 1 conf := conference{cmdTitle, cmdStart, cmdEnd, confDurationDays} // gather all rooms and persons // TODO // TODO: make room and day structs // sort by room and day into structure // TODO // valid rooms: Heuckenlock, Heuckenlock {Ebbe, Flut}, Holzhafen, Raackmoor, Wohldorfer Wald // assign the conference and days to the schedule speaker1 := person{1, "Frau Testperson"} day1Room1Event1 := event{123, "1-123", "Heuckenlock", "Opening Keynote", "2018-11-18T21:00:00+01:00", "21:00", "01:00", "", []person{speaker1}} day1Room1Event2 := event{124, "1-124", "Heuckenlock", "Quartalszahlen", "2018-11-18T22:00:00+01:00", "22:00", "00:30", "de", []person{speaker1}} day1Room1Events := []event{day1Room1Event1, day1Room1Event2} day1Room1 := room{"Heuckenlock", day1Room1Events} day1Room2Event1 := event{223, "", "Holzhafen", "Room 2 Talk 1", "2018-11-18T21:00:00+01:00", "21:00", "01:00", "", []person{speaker1}} day1Room2Event2 := event{224, "", "Holzhafen", "Room 2 Title 2", "2018-11-18T22:00:00+01:00", "22:00", "00:30", "", []person{speaker1}} day1Room2Events := []event{day1Room2Event1, day1Room2Event2} day1Room2 := room{"Holzhafen", day1Room2Events} day1Rooms := []room{day1Room1, day1Room2} day1 := day{1, "2018-11-18", "2018-11-18T00:00:00+01:00", "2018-11-19T00:00:00+01:00", day1Rooms} days := []day{day1} sched := frabSchedule{conf, days} /* * Data Export */ // open output file xmlOutput, err := os.Create("schedule.xml") defer xmlOutput.Close() if err != nil { log.Fatal("Error opening XML file for output:\n", err) } t := template.New("Frab XML Template") t, err = t.ParseFiles("tmpl/schedule.xml") if err != nil { log.Fatal("Error parsing XML template:\n", err) } err = t.ExecuteTemplate(xmlOutput, "schedule.xml", sched) if err != nil { log.Println("Error executing XML template:\n", err) } /* * Print Summary */ // TODO fmt.Println("done") }