1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
6
// TODO(ericsnow) Eliminate the apiserver/common import if possible.
7
// TODO(ericsnow) Eliminate the params import if possible.
10
"github.com/juju/errors"
11
"gopkg.in/juju/names.v2"
13
"github.com/juju/juju/apiserver/common"
14
"github.com/juju/juju/apiserver/params"
15
"github.com/juju/juju/payload"
16
"github.com/juju/juju/payload/api"
19
// NewPayloadResult builds a new PayloadResult from the provided tag
20
// and error. NotFound is also set based on the error.
21
func NewPayloadResult(id string, err error) PayloadResult {
22
result := payload.Result{
25
NotFound: errors.IsNotFound(err),
28
return Result2api(result)
31
// API2Result converts the API result to a payload.Result.
32
func API2Result(r PayloadResult) (payload.Result, error) {
33
result := payload.Result{
37
id, err := API2ID(r.Tag)
39
return result, errors.Trace(err)
44
pl, err := api.API2Payload(*r.Payload)
46
return result, errors.Trace(err)
52
result.Error = common.RestoreError(r.Error)
58
// Result2api converts the payload.Result into a PayloadResult.
59
func Result2api(result payload.Result) PayloadResult {
61
NotFound: result.NotFound,
65
res.Tag = names.NewPayloadTag(result.ID).String()
68
if result.Payload != nil {
69
pl := api.Payload2api(*result.Payload)
73
if result.Error != nil {
74
res.Error = common.ServerError(result.Error)
80
// API2ID converts the given tag string into a payload ID.
81
func API2ID(tagStr string) (string, error) {
85
tag, err := names.ParsePayloadTag(tagStr)
87
return "", errors.Trace(err)
92
// Payloads2TrackArgs converts the provided payload info into arguments
93
// for the Track API endpoint.
94
func Payloads2TrackArgs(payloads []payload.Payload) TrackArgs {
96
for _, pl := range payloads {
97
fullPayload := payload.FullPayloadInfo{Payload: pl}
98
arg := api.Payload2api(fullPayload)
99
args.Payloads = append(args.Payloads, arg)
104
// IDs2ListArgs converts the provided payload IDs into arguments
105
// for the List API endpoint.
106
func IDs2ListArgs(ids []string) params.Entities {
110
// FullIDs2LookUpArgs converts the provided payload "full" IDs into arguments
111
// for the LookUp API endpoint.
112
func FullIDs2LookUpArgs(fullIDs []string) LookUpArgs {
114
for _, fullID := range fullIDs {
115
name, rawID := payload.ParseID(fullID)
116
args.Args = append(args.Args, LookUpArg{
124
// IDs2SetStatusArgs converts the provided payload IDs into arguments
125
// for the SetStatus API endpoint.
126
func IDs2SetStatusArgs(ids []string, status string) SetStatusArgs {
127
var args SetStatusArgs
128
for _, id := range ids {
132
arg.Tag = names.NewPayloadTag(id).String()
133
args.Args = append(args.Args, arg)
138
// IDs2UntrackArgs converts the provided payload IDs into arguments
139
// for the Untrack API endpoint.
140
func IDs2UntrackArgs(ids []string) params.Entities {
144
func ids2args(ids []string) params.Entities {
145
var args params.Entities
146
for _, id := range ids {
147
tag := names.NewPayloadTag(id).String()
148
args.Entities = append(args.Entities, params.Entity{