github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/net/warnings_collector.go (about) 1 package net 2 3 import ( 4 "os" 5 "strings" 6 7 "github.com/cloudfoundry/cli/cf/terminal" 8 ) 9 10 type WarningsCollector struct { 11 ui terminal.UI 12 warning_producers []WarningProducer 13 } 14 15 type WarningProducer interface { 16 Warnings() []string 17 } 18 19 func NewWarningsCollector(ui terminal.UI, warning_producers ...WarningProducer) (warnings_collector WarningsCollector) { 20 warnings_collector.ui = ui 21 warnings_collector.warning_producers = warning_producers 22 return 23 } 24 25 func (warnings_collector WarningsCollector) PrintWarnings() { 26 warnings := []string{} 27 for _, warning_producer := range warnings_collector.warning_producers { 28 for _, warning := range warning_producer.Warnings() { 29 warnings = append(warnings, warning) 30 } 31 } 32 33 if os.Getenv("CF_RAISE_ERROR_ON_WARNINGS") != "" { 34 if len(warnings) > 0 { 35 panic(strings.Join(warnings, "\n")) 36 } 37 } 38 39 warnings = warnings_collector.removeDuplicates(warnings) 40 41 for _, warning := range warnings { 42 warnings_collector.ui.Warn(warning) 43 } 44 } 45 46 func (warnings_collector WarningsCollector) removeDuplicates(stringArray []string) []string { 47 length := len(stringArray) - 1 48 for i := 0; i < length; i++ { 49 for j := i + 1; j <= length; j++ { 50 if stringArray[i] == stringArray[j] { 51 stringArray[j] = stringArray[length] 52 stringArray = stringArray[0:length] 53 length-- 54 j-- 55 } 56 } 57 } 58 return stringArray 59 }