content: // Licensed to the Apache Software Foundation (ASF) under one
  // or more contributor license agreements.  See the NOTICE file
  // distributed with this work for additional information
  // regarding copyright ownership.  The ASF licenses this file
  // to you 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.apache.cloudstack.util.solidfire;
  
  import com.cloud.dc.ClusterVO;
  import com.cloud.dc.dao.ClusterDao;
  import com.cloud.storage.SnapshotVO;
  import com.cloud.storage.VolumeVO;
  import com.cloud.storage.dao.SnapshotDao;
  import com.cloud.storage.dao.SnapshotDetailsDao;
  import com.cloud.storage.dao.SnapshotDetailsVO;
  import com.cloud.storage.dao.VolumeDao;
  import com.cloud.user.Account;
  import com.cloud.user.dao.AccountDao;
  import com.cloud.utils.exception.CloudRuntimeException;
  
  import org.apache.cloudstack.api.response.solidfire.ApiVolumeSnapshotDetailsResponse;
  import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
  import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import javax.inject.Inject;
  
  public class SolidFireIntegrationTestUtil {
      @Inject private AccountDao accountDao;
      @Inject private ClusterDao clusterDao;
      @Inject private PrimaryDataStoreDao storagePoolDao;
      @Inject private SnapshotDao snapshotDao;
      @Inject private SnapshotDetailsDao snapshotDetailsDao;
      @Inject private VolumeDao volumeDao;
  
      private SolidFireIntegrationTestUtil() {}
  
      public long getAccountIdForAccountUuid(String accountUuid) {
          Account account = accountDao.findByUuid(accountUuid);
  
          if (account == null) {
              throw new CloudRuntimeException("Unable to find Account for ID: " + accountUuid);
          }
  
          return account.getAccountId();
      }
  
      public long getAccountIdForVolumeUuid(String volumeUuid) {
          VolumeVO volume = volumeDao.findByUuid(volumeUuid);
  
          if (volume == null) {
              throw new CloudRuntimeException("Unable to find Volume for ID: " + volumeUuid);
          }
  
          return volume.getAccountId();
      }
  
      public long getAccountIdForSnapshotUuid(String snapshotUuid) {
          SnapshotVO snapshot = snapshotDao.findByUuid(snapshotUuid);
  
          if (snapshot == null) {
              throw new CloudRuntimeException("Unable to find Volume for ID: " + snapshotUuid);
          }
  
          return snapshot.getAccountId();
      }
  
      public long getClusterIdForClusterUuid(String clusterUuid) {
          ClusterVO cluster = clusterDao.findByUuid(clusterUuid);
  
          if (cluster == null) {
              throw new CloudRuntimeException("Unable to find Volume for ID: " + clusterUuid);
          }
  
          return cluster.getId();
      }
  
      public long getStoragePoolIdForStoragePoolUuid(String storagePoolUuid) {
          StoragePoolVO storagePool = storagePoolDao.findByUuid(storagePoolUuid);
  
          if (storagePool == null) {
              throw new CloudRuntimeException("Unable to find Volume for ID: " + storagePoolUuid);
          }
  
          return storagePool.getId();
      }
  
      public String getPathForVolumeUuid(String volumeUuid) {
          VolumeVO volume = volumeDao.findByUuid(volumeUuid);
  
          if (volume == null) {
              throw new CloudRuntimeException("Unable to find Volume for ID: " + volumeUuid);
          }
  
          return volume.getPath();
      }
  
      public String getVolume_iScsiName(String volumeUuid) {
          VolumeVO volume = volumeDao.findByUuid(volumeUuid);
  
          if (volume == null) {
              throw new CloudRuntimeException("Unable to find Volume for ID: " + volumeUuid);
          }
  
          return volume.get_iScsiName();
      }
  
      public List<ApiVolumeSnapshotDetailsResponse> getSnapshotDetails(String snapshotUuid) {
          SnapshotVO snapshot = snapshotDao.findByUuid(snapshotUuid);
  
          if (snapshot == null) {
              throw new CloudRuntimeException("Unable to find Volume for ID: " + snapshotUuid);
          }
  
          List<SnapshotDetailsVO> snapshotDetails = snapshotDetailsDao.listDetails(snapshot.getId());
  
          List<ApiVolumeSnapshotDetailsResponse> responses = new ArrayList<>();
  
          if (snapshotDetails != null) {
              for (SnapshotDetailsVO snapshotDetail : snapshotDetails) {
                  ApiVolumeSnapshotDetailsResponse response = new ApiVolumeSnapshotDetailsResponse(
                      snapshotDetail.getResourceId(),
                      snapshotDetail.getName(),
                      snapshotDetail.getValue()
                  );
  
                  responses.add(response);
              }
          }
  
          return responses;
      }
  }
  