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

com.emc.vipr.model.sys.backup.BackupUploadStatus Maven / Gradle / Ivy

There is a newer version: 3.5.0.0
Show newest version
/*
 * Copyright (c) 2015 EMC Corporation
 * All Rights Reserved
 */
package com.emc.vipr.model.sys.backup;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 * BackupUploadStatus is a class used by REST API to represent the backupset upload status
 */
@XmlRootElement(name = "backup_upload_status")
public class BackupUploadStatus implements Serializable {
    private static final Logger log = LoggerFactory.getLogger(BackupUploadStatus.class);
    private static final long serialVersionUID = -1322322139926395160L;
    private static final String KEY_BACKUP_NAME = "backupName";
    private static final String KEY_STATUS = "status";
    private static final String KEY_PROGRESS = "progress";
    private static final String KEY_ERROR_CODE = "errorCode";

    private String backupName;
    private Status status;
    private Integer progress;
    private ErrorCode errorCode;

    public BackupUploadStatus() {
    }

    public BackupUploadStatus(String backupName, Status status, Integer progress, ErrorCode errorCode) {
         update(backupName, status, progress, errorCode);
    }

    public BackupUploadStatus(Map configs) {
        update(configs);
    }

    @XmlElement(name = "backup_name")
    public String getBackupName() {
        return this.backupName;
    }

    public void setBackupName(String backupName) {
        this.backupName = backupName;
    }

    @XmlElement(name = "status")
    public Status getStatus() {
        return this.status;
    }

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

    @XmlElement(name = "progress")
    public Integer getProgress() {
        return this.progress;
    }

    public void setProgress(int progress) {
        this.progress = progress;
    }

    @XmlElement(name = "error_code")
    public ErrorCode getErrorCode() {
        return this.errorCode;
    }

    public void setErrorCode(ErrorCode errorCode) {
        this.errorCode = errorCode;
    }

    public Map getAllItems() {
        Map uploadStatus = new HashMap();
        if (this.backupName != null) {
            uploadStatus.put(KEY_BACKUP_NAME, this.backupName);
        }
        if (this.getStatus() != null) {
            uploadStatus.put(KEY_STATUS, this.getStatus().toString());
        }
        if (this.progress != null) {
            uploadStatus.put(KEY_PROGRESS, String.valueOf(this.getProgress()));
        }
        if (this.errorCode != null) {
            uploadStatus.put(KEY_ERROR_CODE, this.getErrorCode().toString());
        }
        return uploadStatus;
    }

    private void update(Map configs) {
        String backupName = configs.get(KEY_BACKUP_NAME);
        Status status = (configs.get(KEY_STATUS) != null) ? Status.valueOf(configs.get(KEY_STATUS)) : null;
        Integer progress = (configs.get(KEY_PROGRESS) != null) ? Integer.parseInt(configs.get(KEY_PROGRESS)) : null;
        ErrorCode errCode = (configs.get(KEY_ERROR_CODE) != null) ? ErrorCode.valueOf(configs.get(KEY_ERROR_CODE)) : null;
        update(backupName, status, progress, errCode);
    }

    public void update(String backupName, Status status, Integer progress, ErrorCode errorCode) {
        log.info("Backup upload status before updating: {}", this);
        this.backupName = (backupName != null) ? backupName: this.backupName;
        this.progress = (progress != null) ? progress : this.progress;
        this.errorCode = (errorCode != null) ? errorCode : this.errorCode;
        this.status = (status != null) ? status : this.status;
        updatePostCheck();
        log.info("Backup upload status after updating: {}", this);
    }

    private void updatePostCheck() {
        log.info("Backup upload status before the check: {}", this);
        if (this.status == null) {
            return;
        }
        switch (this.status) {
            case NOT_STARTED:
                this.progress = null;
                this.errorCode = null;
                break;
            case DONE:
                if (this.progress != 100) {
                    log.warn("Upload progress should be 100 percents, while it's " + this.progress);
                    this.progress = 100;
                }
                this.errorCode = null;
                break;
        }
        if (this.backupName == null) {
            log.warn("Backup name should not be null");
            this.status = null;
            this.progress = null;
            this.errorCode = null;
        }
    }

    /**
     * The status of uploading backup set
     */
    @XmlType(name = "backupUploadStatus_Status")
    public enum Status {
        NOT_STARTED,  // have not started yet
        IN_PROGRESS,  // in progress
        FAILED,       // failed
        DONE,         // success
        CANCELLED     // upload was cancelled
    }

    /**
     * The error code of upload failure
     */
    @XmlType(name = "backupUploadStatus_ErrorCode")
    public enum ErrorCode {
        FTP_NOT_CONFIGURED,      // FTP server has not been configured
        BACKUP_NOT_EXIST,        // Can not find the target backup files on disk
        INVALID_BACKUP,          // Target backup is invalid
        UPLOAD_FAILURE           // internal failures during the upload
    }


    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("BackupName:");
        sb.append(getBackupName());
        sb.append(", Status:");
        sb.append(getStatus());
        sb.append(", Progress:");
        sb.append(getProgress());
        sb.append(", ErrorCode:");
        sb.append(getErrorCode());
        return sb.toString();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy