/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.vipr.client.core;
import static com.emc.vipr.client.impl.jersey.ClientUtils.addQueryParam;
import static com.emc.vipr.client.system.impl.PathConstants.*;
import javax.ws.rs.core.UriBuilder;
import com.emc.vipr.client.impl.RestClient;
import com.emc.vipr.model.sys.backup.*;
import com.emc.vipr.model.sys.backup.BackupSets.BackupSet;
public class Backup {
protected final RestClient client;
public Backup(RestClient client) {
this.client = client;
}
public BackupSets getBackups() {
return client.get(BackupSets.class, BACKUP_URL, "");
}
public BackupSet getBackup(String name) {
UriBuilder builder = client.uriBuilder(BACKUP_URL+"backup");
addQueryParam(builder, "tag", name);
return client.getURI(BackupSet.class, builder.build());
}
public ExternalBackups getExternalBackups() {
return client.get(ExternalBackups.class, BACKUP_EXTERNAL_URL);
}
public BackupInfo getBackupInfo(String name, boolean isLocal) {
UriBuilder builder = client.uriBuilder(BACKUP_INFO_URL);
addQueryParam(builder, "backupname", name);
if (isLocal) {
addQueryParam(builder, "isLocal", isLocal);
}
return client.getURI(BackupInfo.class, builder.build());
}
public void createBackup(String name, boolean force) {
int specialTimeout = 30 * 60 * 1000; // 30 minutes
client.getConfig().withReadTimeout(specialTimeout);
client.getConfig().withConnectionTimeout(specialTimeout);
UriBuilder builder = client.uriBuilder(BACKUP_CREATE_URL);
addQueryParam(builder, "tag", name);
if (force) {
addQueryParam(builder, "force", true);
}
client.postURI(String.class, builder.build());
}
public void deleteBackup(String name) {
UriBuilder builder = client.uriBuilder(BACKUP_CREATE_URL);
addQueryParam(builder, "tag", name);
client.deleteURI(String.class, builder.build());
}
public void uploadBackup(String name) {
UriBuilder builder = client.uriBuilder(BACKUP_UPLOAD_URL);
addQueryParam(builder, "tag", name);
client.postURI(String.class, builder.build());
}
public BackupUploadStatus uploadBackupStatus(String name) {
BackupUploadStatus status = null;
UriBuilder builder = client.uriBuilder(BACKUP_UPLOAD_URL);
addQueryParam(builder, "tag", name);
try {
status = client.getURI(BackupUploadStatus.class, builder.build());
} catch (Exception e) {
status = new BackupUploadStatus();
}
return status;
}
public void pullBackup(String name) {
UriBuilder builder = client.uriBuilder(BACKUP_PULL_URL);
addQueryParam(builder, "file", name);
client.postURI(String.class, builder.build());
}
public void cancelPullBackup() {
UriBuilder builder = client.uriBuilder(BACKUP_PULL_CANCEL_URL);
client.postURI(String.class, builder.build());
}
public void restore(String name, String password, boolean isLocal, boolean isGeoFromScratch) {
UriBuilder builder = client.uriBuilder(RESTORE_URL);
addQueryParam(builder, "backupname", name);
addQueryParam(builder, "password", password);
if (isGeoFromScratch) {
addQueryParam(builder, "isgeofromscratch", true);
}
if (isLocal) {
addQueryParam(builder, "isLocal", true);
}
client.postURI(String.class, builder.build());
}
public BackupRestoreStatus getRestoreStatus(String name, boolean isLocal) {
BackupRestoreStatus status = null;
UriBuilder builder = client.uriBuilder(RESTORE_STATUS_URL);
addQueryParam(builder, "backupname", name);
addQueryParam(builder, "isLocal", isLocal);
try {
status = client.getURI(BackupRestoreStatus.class, builder.build());
} catch (Exception e) {
status = new BackupRestoreStatus();
status.setStatus(BackupRestoreStatus.Status.DOWNLOAD_FAILED);
status.setDetails(e.getMessage());
}
return status;
}
public BackupOperationStatus getBackupOperationStatus() {
BackupOperationStatus status = new BackupOperationStatus();
try {
status = client.get(BackupOperationStatus.class, BACKUP_STATUS_URL);
} catch (Exception e) {
System.out.println("Get backup operation status failed:" +e.getMessage());
}
return status;
}
}