org.sfs.vo.XVolume.java Source code

Java tutorial

Introduction

Here is the source code for org.sfs.vo.XVolume.java

Source

/*
 * Copyright 2016 The Simple File Server 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 org.sfs.vo;

import com.google.common.base.Optional;
import io.vertx.core.json.JsonObject;

import static com.google.common.base.Optional.fromNullable;
import static org.sfs.filesystem.volume.Volume.Status;
import static org.sfs.filesystem.volume.Volume.Status.fromNameIfExists;

public abstract class XVolume<T extends XVolume> {

    private String id;
    private XFileSystem<? extends XFileSystem> fileSystem;
    private XAllocatedFile<? extends XAllocatedFile> indexFile;
    private XAllocatedFile<? extends XAllocatedFile> dataFile;
    private Long usableSpace;
    private Status status;

    public abstract T copy();

    protected T copyInternal(XVolume t) {
        setId(t.id);
        setStatus(t.status);
        setUsableSpace(t.usableSpace);
        setFileSystem(t.fileSystem != null ? t.fileSystem.copy() : null);
        setIndexFile(t.indexFile != null ? t.indexFile.copy() : null);
        setDataFile(t.dataFile != null ? t.dataFile.copy() : null);
        return (T) this;
    }

    public Optional<String> getId() {
        return fromNullable(id);
    }

    public T setId(String id) {
        this.id = id;
        return (T) this;
    }

    public Optional<XAllocatedFile<? extends XAllocatedFile>> getDataFile() {
        return fromNullable(dataFile);
    }

    public T setDataFile(XAllocatedFile<? extends XAllocatedFile> dataFile) {
        this.dataFile = dataFile;
        return (T) this;
    }

    public Optional<XAllocatedFile<? extends XAllocatedFile>> getIndexFile() {
        return fromNullable(indexFile);
    }

    public T setIndexFile(XAllocatedFile<? extends XAllocatedFile> indexFile) {
        this.indexFile = indexFile;
        return (T) this;
    }

    public Optional<XFileSystem<? extends XFileSystem>> getFileSystem() {
        return fromNullable(fileSystem);
    }

    public T setFileSystem(XFileSystem<? extends XFileSystem> fileSystem) {
        this.fileSystem = fileSystem;
        return (T) this;
    }

    public Optional<Status> getStatus() {
        return fromNullable(status);
    }

    public T setStatus(Status status) {
        this.status = status;
        return (T) this;
    }

    public Optional<Long> getUsableSpace() {
        return fromNullable(usableSpace);
    }

    public T setUsableSpace(Long usableSpace) {
        this.usableSpace = usableSpace;
        return (T) this;
    }

    public T merge(XVolume<? extends XVolume> other) {
        this.id = other.id;
        this.fileSystem = other.fileSystem;
        this.status = other.status;
        this.indexFile = other.indexFile;
        this.dataFile = other.dataFile;
        this.usableSpace = other.usableSpace;
        return (T) this;
    }

    public T merge(JsonObject jsonObject) {
        this.id = jsonObject.getString("id");
        JsonObject jsonFileSystem = jsonObject.getJsonObject("file_system");
        if (jsonFileSystem != null) {
            this.fileSystem = new TransientXFileSystem().merge(jsonFileSystem);
        } else {
            this.fileSystem = null;
        }
        JsonObject jsonIndexFile = jsonObject.getJsonObject("index_file");
        if (jsonIndexFile != null) {
            this.indexFile = new TransientXAllocatedFile().merge(jsonIndexFile);
        } else {
            this.indexFile = null;
        }
        JsonObject jsonDataFile = jsonObject.getJsonObject("data_file");
        if (jsonDataFile != null) {
            this.dataFile = new TransientXAllocatedFile().merge(jsonDataFile);
        }
        this.status = fromNameIfExists(jsonObject.getString("status"));
        this.usableSpace = jsonObject.getLong("usable_space");
        return (T) this;
    }

    public JsonObject toJsonObject() {
        JsonObject jsonObject = new JsonObject().put("id", id).put("status", status != null ? status.name() : null)
                .put("usable_space", usableSpace);

        if (fileSystem != null) {
            JsonObject jsonFileSystem = fileSystem.toJsonObject();
            jsonObject = jsonObject.put("file_system", jsonFileSystem);
        }
        if (indexFile != null) {
            JsonObject jsonIndexFile = indexFile.toJsonObject();
            jsonObject = jsonObject.put("index_file", jsonIndexFile);
        }
        if (dataFile != null) {
            JsonObject jsonDataFile = dataFile.toJsonObject();
            jsonObject = jsonObject.put("data_file", jsonDataFile);
        }
        return jsonObject;
    }
}