SEBA-704 implement sorting
Change-Id: Ic790b01b36d6bad9f79e064bc04f77a22ddfd396
diff --git a/commands/command.go b/commands/command.go
index 4a38d5b..bdd7dfb 100644
--- a/commands/command.go
+++ b/commands/command.go
@@ -20,6 +20,7 @@
"encoding/json"
"fmt"
"github.com/opencord/cordctl/format"
+ "github.com/opencord/cordctl/order"
"google.golang.org/grpc"
"gopkg.in/yaml.v2"
"io"
@@ -95,6 +96,11 @@
OutputAs string `short:"o" long:"outputas" default:"table" choice:"table" choice:"json" choice:"yaml" description:"Type of output to generate"`
}
+type ListOutputOptions struct {
+ OutputOptions
+ OrderBy string `short:"r" long:"orderby" default:"" description:"Specify the sort order of the results"`
+}
+
func toOutputType(in string) OutputType {
switch in {
case "table":
@@ -110,6 +116,7 @@
type CommandResult struct {
Format format.Format
+ OrderBy string
OutputAs OutputType
Data interface{}
}
@@ -191,17 +198,28 @@
func GenerateOutput(result *CommandResult) {
if result != nil && result.Data != nil {
+ data := result.Data
+ if result.OrderBy != "" {
+ s, err := order.Parse(result.OrderBy)
+ if err != nil {
+ panic(err)
+ }
+ data, err = s.Process(data)
+ if err != nil {
+ panic(err)
+ }
+ }
if result.OutputAs == OUTPUT_TABLE {
tableFormat := format.Format(result.Format)
- tableFormat.Execute(OutputStream, true, result.Data)
+ tableFormat.Execute(OutputStream, true, data)
} else if result.OutputAs == OUTPUT_JSON {
- asJson, err := json.Marshal(&result.Data)
+ asJson, err := json.Marshal(&data)
if err != nil {
panic(err)
}
fmt.Fprintf(OutputStream, "%s", asJson)
} else if result.OutputAs == OUTPUT_YAML {
- asYaml, err := yaml.Marshal(&result.Data)
+ asYaml, err := yaml.Marshal(&data)
if err != nil {
panic(err)
}
@@ -228,3 +246,23 @@
GenerateOutput(&result)
}
+
+// Applies common output options to format and generate output
+func FormatAndGenerateListOutput(options *ListOutputOptions, default_format string, quiet_format string, data interface{}) {
+ outputFormat := CharReplacer.Replace(options.Format)
+ if outputFormat == "" {
+ outputFormat = default_format
+ }
+ if options.Quiet {
+ outputFormat = quiet_format
+ }
+
+ result := CommandResult{
+ Format: format.Format(outputFormat),
+ OutputAs: toOutputType(options.OutputAs),
+ Data: data,
+ OrderBy: options.OrderBy,
+ }
+
+ GenerateOutput(&result)
+}