Added Copyright headers.
[src/xds/xds-cli.git] / cmd-sdks.go
1 /*
2  * Copyright (C) 2017 "IoT.bzh"
3  * Author Sebastien Douheret <sebastien@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18
19 package main
20
21 import (
22         "fmt"
23         "strconv"
24
25         "github.com/iotbzh/xds-agent/lib/xaapiv1"
26         "github.com/urfave/cli"
27 )
28
29 func initCmdSdks(cmdDef *[]cli.Command) {
30         *cmdDef = append(*cmdDef, cli.Command{
31                 Name:     "sdks",
32                 Aliases:  []string{"sdk"},
33                 HideHelp: true,
34                 Usage:    "SDKs commands group",
35                 Subcommands: []cli.Command{
36                         {
37                                 Name:    "add",
38                                 Aliases: []string{"a"},
39                                 Usage:   "Add a new SDK",
40                                 Action:  sdksAdd,
41                         },
42                         {
43                                 Name:   "get",
44                                 Usage:  "Get a property of a SDK",
45                                 Action: sdksGet,
46                                 Flags: []cli.Flag{
47                                         cli.StringFlag{
48                                                 Name:  "id",
49                                                 Usage: "sdk id",
50                                         },
51                                 },
52                         },
53                         {
54                                 Name:    "list",
55                                 Aliases: []string{"ls"},
56                                 Usage:   "List installed SDKs",
57                                 Action:  sdksList,
58                                 Flags: []cli.Flag{
59                                         cli.BoolFlag{
60                                                 Name:  "verbose, v",
61                                                 Usage: "display verbose output",
62                                         },
63                                 },
64                         },
65                         {
66                                 Name:    "remove",
67                                 Aliases: []string{"rm"},
68                                 Usage:   "Remove an existing SDK",
69                                 Action:  sdksRemove,
70                                 Flags: []cli.Flag{
71                                         cli.StringFlag{
72                                                 Name:  "id",
73                                                 Usage: "sdk id",
74                                         },
75                                 },
76                         },
77                 },
78         })
79 }
80
81 func sdksList(ctx *cli.Context) error {
82         // Get SDKs list
83         sdks := []xaapiv1.SDK{}
84         if err := sdksListGet(&sdks); err != nil {
85                 return cli.NewExitError(err.Error(), 1)
86         }
87         _displaySdks(sdks, ctx.Bool("verbose"))
88         return nil
89 }
90
91 func sdksGet(ctx *cli.Context) error {
92         id := GetID(ctx)
93         if id == "" {
94                 return cli.NewExitError("id parameter or option must be set", 1)
95         }
96         sdks := xaapiv1.SDK{}
97         url := "servers/" + strconv.Itoa(XdsServerIndexGet()) + "/sdks/" + id
98         if err := HTTPCli.Get(url, &sdks); err != nil {
99                 return cli.NewExitError(err.Error(), 1)
100         }
101         _displaySdks([]xaapiv1.SDK{sdks}, true)
102         return nil
103 }
104
105 func _displaySdks(sdks []xaapiv1.SDK, verbose bool) {
106         // Display result
107         first := true
108         writer := NewTableWriter()
109         for _, s := range sdks {
110                 if verbose {
111                         if !first {
112                                 fmt.Fprintln(writer)
113                         }
114                         fmt.Fprintln(writer, "ID\t"+s.ID)
115                         fmt.Fprintln(writer, "Name\t"+s.Name)
116                         fmt.Fprintln(writer, "Profile\t"+s.Profile)
117                         fmt.Fprintln(writer, "Arch\t"+s.Arch)
118                         fmt.Fprintln(writer, "Version\t"+s.Version)
119                         fmt.Fprintln(writer, "Path\t"+s.Path)
120
121                 } else {
122                         if first {
123                                 fmt.Fprintf(writer, "List of installed SDKs: \n")
124                                 fmt.Fprintf(writer, "  ID\tNAME\n")
125                         }
126                         fmt.Fprintf(writer, "  %s\t%s\n", s.ID, s.Name)
127                 }
128                 first = false
129         }
130         writer.Flush()
131 }
132
133 func sdksListGet(sdks *[]xaapiv1.SDK) error {
134         url := "servers/" + strconv.Itoa(XdsServerIndexGet()) + "/sdks"
135         if err := HTTPCli.Get(url, &sdks); err != nil {
136                 return err
137         }
138         Log.Debugf("Result of %s: %v", url, sdks)
139
140         return nil
141 }
142
143 func sdksAdd(ctx *cli.Context) error {
144         return fmt.Errorf("not supported yet")
145 }
146
147 func sdksRemove(ctx *cli.Context) error {
148         id := GetID(ctx)
149         if id == "" {
150                 return cli.NewExitError("id parameter or option must be set", 1)
151         }
152
153         return fmt.Errorf("not supported yet")
154 }