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

io.dddspring.common.port.adapter.persistence.leveldb.LevelDBKey Maven / Gradle / Ivy

There is a newer version: 2.0.1
Show newest version
//   Copyright 2012,2013 Vaughn Vernon
//
//   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 io.dddspring.common.port.adapter.persistence.leveldb;

import java.util.ArrayList;
import java.util.List;

public class LevelDBKey {

    private String cachedKey;
    private byte[] cachedKeyBytes;
    private String category;
    private int numberOfSegments;
    private LevelDBKey primaryKey;
    private List segments;

    public LevelDBKey(String aCategory, int aNumberOfSegments) {
        this(null, aCategory, aNumberOfSegments);
    }

    public LevelDBKey(String aCategory, String... aSegments) {
        this(null, aCategory, aSegments.length);

        for (String segment : aSegments) {
            this.specifyNextSegment(segment);
        }
    }

    public LevelDBKey(LevelDBKey aPrimaryKey, String aCategory, String... aSegments) {
        this(aPrimaryKey, aCategory, aSegments.length);

        for (String segment : aSegments) {
            this.specifyNextSegment(segment);
        }
    }

    public LevelDBKey(LevelDBKey aPrimaryKey, String aCategory, int aNumberOfSegments) {
        super();

        this.setCategory(aCategory);
        this.setNumberOfSegments(aNumberOfSegments);
        this.setPrimaryKey(aPrimaryKey);
        this.setSegments(new ArrayList(aNumberOfSegments));
    }

    public String key() {
        if (this.cachedKey == null) {
            StringBuffer buf = new StringBuffer(this.category());

            for (String segment : this.segments()) {
                buf.append(':').append(segment);
            }

            this.cachedKey = buf.toString();
        }

        return this.cachedKey;
    }

    public byte[] keyAsBytes() {
        if (this.cachedKeyBytes == null) {
            this.cachedKeyBytes = this.key().getBytes();
        }

        return this.cachedKeyBytes;
    }

    public String primaryKeyValue() {
        if (this.primaryKey() == null) {
            throw new IllegalStateException("Unknown primary key.");
        }

        return this.primaryKey().key();
    }

    public void specifyNextSegment(String aSegment) {
        if (this.segments().size() == this.numberOfSegments()) {
            throw new IllegalStateException("Specified too many segments.");
        }

        this.cachedKey = null;
        this.cachedKeyBytes = null;

        this.segments().add(aSegment);
    }

    private String category() {
        return this.category;
    }

    private void setCategory(String aCategory) {
        if (aCategory == null || aCategory.trim().isEmpty()) {
            throw new IllegalArgumentException("The category must be provided.");
        }

        this.category = aCategory;
    }

    private int numberOfSegments() {
        return this.numberOfSegments;
    }

    private void setNumberOfSegments(int aNumberOfSegments) {
        this.numberOfSegments = aNumberOfSegments;
    }

    private LevelDBKey primaryKey() {
        return this.primaryKey;
    }

    private void setPrimaryKey(LevelDBKey aPrimaryKey) {
        this.primaryKey = aPrimaryKey;
    }

    private List segments() {
        return this.segments;
    }

    private void setSegments(List aSegments) {
        this.segments = aSegments;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy