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  }