Package org.platformlayer.service.cloud.openstack.backups

Source Code of org.platformlayer.service.cloud.openstack.backups.OpenstackBackupContext

package org.platformlayer.service.cloud.openstack.backups;

import java.io.IOException;

import javax.xml.bind.JAXBException;

import org.openstack.client.OpenstackCredentials;
import org.openstack.client.OpenstackException;
import org.openstack.client.common.OpenstackSession;
import org.openstack.client.storage.OpenstackStorageClient;
import com.fathomdb.Utf8;
import org.platformlayer.ops.Command;
import org.platformlayer.ops.OpsException;
import org.platformlayer.ops.backups.Backup;
import org.platformlayer.ops.backups.BackupContext;
import org.platformlayer.ops.backups.BackupData;
import org.platformlayer.ops.backups.BackupItem;
import org.platformlayer.ops.backups.DirectoryBackup;
import org.platformlayer.xml.JaxbHelper;

public class OpenstackBackupContext implements BackupContext {
  BackupData data = new BackupData();
  String containerName;

  OpenstackCredentials credentials;

  ShellBackupClient client;

  ShellBackupClient getClient() {
    if (client == null) {
      client = new ShellBackupClient(this);
    }
    return client;
  }

  @Override
  public void add(BackupItem item) {
    this.data.items.add(item);
  }

  public String getBackupId() {
    return this.data.id;
  }

  public String toPath(String objectName) {
    return getBackupId() + "/" + objectName;
  }

  public String getContainerName() {
    return containerName;
  }

  private void ensureContainer() {
    getStorageClient().root().containers().create(containerName);
  }

  private OpenstackSession openstackSession = null;

  public OpenstackSession getOpenstackSession() {
    if (openstackSession == null) {
      OpenstackSession session = OpenstackSession.create();

      session.authenticate(credentials, false);

      openstackSession = session;

      ensureContainer();
    }
    return openstackSession;
  }

  OpenstackStorageClient storageClient;

  OpenstackStorageClient getStorageClient() {
    if (storageClient == null) {
      storageClient = getOpenstackSession().getStorageClient();
    }
    return storageClient;
  }

  @Override
  public void writeDescriptor() throws OpsException {
    String path = getBackupId() + ".backup.xml";

    JaxbHelper jaxb = JaxbHelper.get(BackupData.class);
    String xml;
    try {
      xml = jaxb.marshal(data, true);
    } catch (JAXBException e) {
      throw new OpsException("Error serializing metadata", e);
    }
    byte[] data = Utf8.getBytes(xml);

    try {
      getStorageClient().putObject(containerName, path, data);
    } catch (OpenstackException e) {
      throw new OpsException("Error uploading metadata", e);
    } catch (IOException e) {
      throw new OpsException("Error uploading metadata", e);
    }
  }

  @Override
  public void doBackup(DirectoryBackup request) throws OpsException {
    getClient().doBackup(request);
  }

  @Override
  public void uploadStream(Backup request, Command dataSourceCommand) throws OpsException {
    getClient().uploadStream(request, dataSourceCommand);
  }

}
TOP

Related Classes of org.platformlayer.service.cloud.openstack.backups.OpenstackBackupContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.