All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.couchbase.client.java.cluster.DefaultBucketSettings Maven / Gradle / Ivy

/*
 * Copyright (c) 2016 Couchbase, Inc.
 *
 * 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 com.couchbase.client.java.cluster;

import java.util.HashMap;
import java.util.Map;

import com.couchbase.client.java.bucket.BucketType;
import com.couchbase.client.java.document.json.JsonObject;

public class DefaultBucketSettings implements BucketSettings {

    private final String name;
    private final BucketType type;
    private final int quota;
    private final int port;
    private final String password;
    private final int replicas;
    private final boolean indexReplicas;
    private final boolean enableFlush;
    private final Map customSettings;
    private final JsonObject raw;

    DefaultBucketSettings(Builder builder) {
        this(builder, JsonObject.empty());
    }

    DefaultBucketSettings(Builder builder, JsonObject raw) {
        name = builder.name();
        type = builder.type();
        quota = builder.quota();
        port = builder.port();
        password = builder.password();
        replicas = builder.replicas();
        indexReplicas = builder.indexReplicas();
        enableFlush = builder.enableFlush();
        customSettings = builder.customSettings();
        this.raw = raw;
    }

    public static Builder builder() {
        return new Builder();
    }

    @Override
    public String name() {
        return name;
    }

    @Override
    public BucketType type() {
        return type;
    }

    @Override
    public int quota() {
        return quota;
    }

    @Override
    public int port() {
        return port;
    }

    @Override
    public String password() {
        return password;
    }

    @Override
    public int replicas() {
        return replicas;
    }

    @Override
    public boolean indexReplicas() {
        return indexReplicas;
    }

    @Override
    public boolean enableFlush() {
        return enableFlush;
    }

    @Override
    public Map customSettings() {
        return customSettings;
    }

    @Override
    public JsonObject raw() {
        return raw;
    }

    public static class Builder implements BucketSettings {

        private String name = "";
        private BucketType type = BucketType.COUCHBASE;
        private int quota = 0;
        private int port = 0;
        private String password = "";
        private int replicas = 0;
        private boolean indexReplicas = false;
        private boolean enableFlush = false;
        private final Map customSettings = new HashMap();

        @Override
        public String name() {
            return name;
        }

        public Builder name(String name) {
            this.name = name;
            return this;
        }

        @Override
        public BucketType type() {
            return type;
        }

        public Builder type(BucketType type) {
            this.type = type;
            return this;
        }

        @Override
        public int quota() {
            return quota;
        }

        public Builder quota(int quota) {
            this.quota = quota;
            return this;
        }

        @Override
        public int port() {
            return port;
        }

        public Builder port(int port) {
            this.port = port;
            return this;
        }

        @Override
        public String password() {
            return password;
        }

        public Builder password(String password) {
            this.password = password;
            return this;
        }

        @Override
        public int replicas() {
            return replicas;
        }

        public Builder replicas(int replicas) {
            this.replicas = replicas;
            return this;
        }

        @Override
        public boolean indexReplicas() {
            return indexReplicas;
        }

        public Builder indexReplicas(boolean indexReplicas) {
            this.indexReplicas = indexReplicas;
            return this;
        }

        @Override
        public boolean enableFlush() {
            return enableFlush;
        }

        public Builder enableFlush(boolean enableFlush) {
            this.enableFlush = enableFlush;
            return this;
        }

        @Override
        public Map customSettings() {
            return this.customSettings;
        }

        @Override
        public JsonObject raw() {
            return JsonObject.empty();
        }

        /**
         * Add a custom setting to the bucket settings (ie. one that is not covered by
         * a native method).
         *
         * @param key the setting's key.
         * @param value the setting's value.
         * @return the Builder for chaining.
         */
        public Builder withSetting(String key, Object value) {
            this.customSettings.put(key, value);
            return this;
        }

        /**
         * Add several custom settings to the bucket settings (ie. settings not covered by
         * a native method).
         *
         * @param customSettings the settings to add.
         * @return the Builder for chaining.
         */
        public Builder withSettings(Map customSettings) {
            this.customSettings.putAll(customSettings);
            return this;
        }

        public DefaultBucketSettings build() {
            return new DefaultBucketSettings(this);
        }

        /**
         * Build the {@link BucketSettings} from the data aggregated by this builder,
         * and set its {@link BucketSettings#raw()} representation as well.
         *
         * @param raw the raw representation for the settings, from the server.
         * @return the new {@link BucketSettings}.
         */
        public DefaultBucketSettings build(JsonObject raw) {
            return new DefaultBucketSettings(this, raw);
        }

    }

    @Override
    public String toString() {
        StringBuilder s = new StringBuilder("DefaultClusterBucketSettings{")
                .append("name='").append(name).append('\'')
                .append(", type=").append(type)
                .append(", quota=").append(quota)
                .append(", port=").append(port)
                .append(", password='").append(password).append('\'')
                .append(", replicas=").append(replicas)
                .append(", indexReplicas=").append(indexReplicas)
                .append(", enableFlush=").append(enableFlush);
        if (!customSettings.isEmpty()) {
            s.append(", customSettings=").append(customSettings);
        }
        s.append('}');
        return s.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy