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) |
| 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 |