shardingsphere-operator/pkg/kubernetes/metadata/builder.go (60 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 metadata
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// MetadataBuilder represents a metadata
type MetadataBuilder interface {
SetName(name string) MetadataBuilder
SetNamespace(namespace string) MetadataBuilder
SetLabels(labels map[string]string) MetadataBuilder
SetAnnotations(annos map[string]string) MetadataBuilder
SetOwnerReferences(refs []metav1.OwnerReference) MetadataBuilder
SetFinalizers(fs []string) MetadataBuilder
BuildMetadata() *metav1.ObjectMeta
}
type metadataBuilder struct {
metadata *metav1.ObjectMeta
}
// NewMetadataBuilder creates a new metadata builder
func NewMetadataBuilder() MetadataBuilder {
return &metadataBuilder{
metadata: &metav1.ObjectMeta{},
}
}
// SetName sets the name of the metadata
func (b *metadataBuilder) SetName(name string) MetadataBuilder {
b.metadata.Name = name
return b
}
// SetNamespace sets the namespace of the metadata
func (b *metadataBuilder) SetNamespace(namespace string) MetadataBuilder {
b.metadata.Namespace = namespace
return b
}
// SetLabels sets the labels of the metadata
func (b *metadataBuilder) SetLabels(labels map[string]string) MetadataBuilder {
if b.metadata.Labels == nil {
b.metadata.Labels = map[string]string{}
}
b.metadata.Labels = labels
return b
}
// SetAnnotations set the annotations of the metadata
func (b *metadataBuilder) SetAnnotations(annos map[string]string) MetadataBuilder {
if b.metadata.Annotations == nil {
b.metadata.Annotations = map[string]string{}
}
b.metadata.Annotations = annos
return b
}
// SetOwnerReferences sets the owner references of the metadata
func (b *metadataBuilder) SetOwnerReferences(refs []metav1.OwnerReference) MetadataBuilder {
if b.metadata.OwnerReferences == nil {
b.metadata.OwnerReferences = []metav1.OwnerReference{}
}
b.metadata.OwnerReferences = refs
return b
}
// SetFinalizer sets the finalizer of the metadata
func (b *metadataBuilder) SetFinalizers(fs []string) MetadataBuilder {
if b.metadata.Finalizers == nil {
b.metadata.Finalizers = []string{}
}
b.metadata.Finalizers = fs
return b
}
// Build returns the metadata
func (b *metadataBuilder) BuildMetadata() *metav1.ObjectMeta {
return b.metadata
}