OLD | NEW |
---|---|
1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
4 | 4 |
5 package prod | 5 package prod |
6 | 6 |
7 import ( | 7 import ( |
8 "fmt" | 8 "fmt" |
9 "reflect" | 9 "reflect" |
10 "time" | 10 "time" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 return ret, err | 155 return ret, err |
156 } | 156 } |
157 | 157 |
158 func (tf *typeFilter) Load(props []datastore.Property) error { | 158 func (tf *typeFilter) Load(props []datastore.Property) error { |
159 tf.pm = make(ds.PropertyMap, len(props)) | 159 tf.pm = make(ds.PropertyMap, len(props)) |
160 for _, p := range props { | 160 for _, p := range props { |
161 prop, err := dsR2FProp(p) | 161 prop, err := dsR2FProp(p) |
162 if err != nil { | 162 if err != nil { |
163 return err | 163 return err |
164 } | 164 } |
165 » » tf.pm[p.Name] = append(tf.pm[p.Name], prop) | 165 |
166 » » pdata := tf.pm[p.Name] | |
167 » » if p.Multiple { | |
168 » » » var pslice ds.PropertySlice | |
169 » » » if pdata != nil { | |
170 » » » » var ok bool | |
171 » » » » if pslice, ok = pdata.(ds.PropertySlice); !ok { | |
172 » » » » » return fmt.Errorf("mixed Multiple/non-Mu ltiple properties for %q", p.Name) | |
iannucci
2016/09/16 07:11:03
I don't think this is possible?
dnj
2016/09/16 19:07:22
It shouldn't be, but since we're sitting at an int
| |
173 » » » » } | |
174 » » » } | |
175 » » » tf.pm[p.Name] = append(pslice, prop) | |
176 » » } else { | |
177 » » » if pdata != nil { | |
178 » » » » return fmt.Errorf("multiple properties for non-M ultiple %q", p.Name) | |
179 » » » } | |
180 » » » tf.pm[p.Name] = prop | |
181 » » } | |
166 } | 182 } |
167 return nil | 183 return nil |
168 } | 184 } |
169 | 185 |
170 func (tf *typeFilter) Save() ([]datastore.Property, error) { | 186 func (tf *typeFilter) Save() ([]datastore.Property, error) { |
171 props := []datastore.Property{} | 187 props := []datastore.Property{} |
172 » for name, propList := range tf.pm { | 188 » for name, pdata := range tf.pm { |
173 if len(name) != 0 && name[0] == '$' { | 189 if len(name) != 0 && name[0] == '$' { |
174 continue | 190 continue |
175 } | 191 } |
176 » » multiple := len(propList) > 1 | 192 |
177 » » for _, prop := range propList { | 193 » » var ( |
194 » » » pslice ds.PropertySlice | |
195 » » » multiple bool | |
196 » » ) | |
197 » » switch t := pdata.(type) { | |
198 » » case ds.Property: | |
199 » » » pslice = ds.PropertySlice{t} | |
200 » » case ds.PropertySlice: | |
201 » » » pslice, multiple = t, true | |
202 » » default: | |
203 » » » return nil, fmt.Errorf("unknown PropertyData type %T", t ) | |
204 » » } | |
205 | |
206 » » for _, prop := range pslice { | |
178 toAdd, err := dsF2RProp(tf.ctx, prop) | 207 toAdd, err := dsF2RProp(tf.ctx, prop) |
179 if err != nil { | 208 if err != nil { |
180 return nil, err | 209 return nil, err |
181 } | 210 } |
182 toAdd.Name = name | 211 toAdd.Name = name |
183 toAdd.Multiple = multiple | 212 toAdd.Multiple = multiple |
184 props = append(props, toAdd) | 213 props = append(props, toAdd) |
185 } | 214 } |
186 } | 215 } |
187 return props, nil | 216 return props, nil |
188 } | 217 } |
OLD | NEW |