/
cstor_volume_claim.go
117 lines (100 loc) · 2.97 KB
/
cstor_volume_claim.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
Copyright 2019 The OpenEBS Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1alpha1
import (
apis "github.com/openebs/maya/pkg/apis/openebs.io/v1alpha1"
)
// CStorVolumeClaim a wrapper for ume object
type CStorVolumeClaim struct {
// actual cstorvolumeclaim object
object *apis.CStorVolumeClaim
}
// CStorVolumeClaimList is a list of cstorvolumeclaim objects
type CStorVolumeClaimList struct {
// list of cstor volume claims
items []*CStorVolumeClaim
}
// ListBuilder enables building
// an instance of umeCStorVolumeClaimList
type ListBuilder struct {
list *CStorVolumeClaimList
filters PredicateList
}
// NewListBuilder returns a new instance
// of listBuilder
func NewListBuilder() *ListBuilder {
return &ListBuilder{list: &CStorVolumeClaimList{}}
}
// WithAPIList builds the list of cstorvolume claim
// instances based on the provided
// CStorVolumeClaim api instances
func (b *ListBuilder) WithAPIList(
list *apis.CStorVolumeClaimList) *ListBuilder {
if list == nil {
return b
}
for _, c := range list.Items {
c := c
b.list.items = append(b.list.items, &CStorVolumeClaim{object: &c})
}
return b
}
// List returns the list of CStorVolumeClaims (cvcs)
// instances that was built by this
// builder
func (b *ListBuilder) List() *CStorVolumeClaimList {
if b.filters == nil || len(b.filters) == 0 {
return b.list
}
filtered := &CStorVolumeClaimList{}
for _, cv := range b.list.items {
if b.filters.all(cv) {
filtered.items = append(filtered.items, cv)
}
}
return filtered
}
// Len returns the number of items present
// in the CStorVolumeClaimList
func (l *CStorVolumeClaimList) Len() int {
return len(l.items)
}
// Predicate defines an abstraction
// to determine conditional checks
// against the provided cstorvolume claim instance
type Predicate func(*CStorVolumeClaim) bool
// PredicateList holds a list of cstor volume claims
// based predicates
type PredicateList []Predicate
// all returns true if all the predicates
// succeed against the provided cstorvolumeclaim
// instance
func (l PredicateList) all(c *CStorVolumeClaim) bool {
for _, check := range l {
if !check(c) {
return false
}
}
return true
}
// WithFilter adds filters on which the cstorvolumeclaim has to be filtered
func (b *ListBuilder) WithFilter(pred ...Predicate) *ListBuilder {
b.filters = append(b.filters, pred...)
return b
}
// NewForAPIObject returns a new instance of cstorvolume
func NewForAPIObject(obj *apis.CStorVolumeClaim) *CStorVolumeClaim {
return &CStorVolumeClaim{
object: obj,
}
}