Пример #1
0
  @Override
  public void store(IFrontendActionAsyncCallback callback) {
    if (getProgress() != null || !validate()) {
      return;
    }

    ArrayList<VdcActionType> actionTypes = new ArrayList<>();
    ArrayList<VdcActionParametersBase> paramerterList = new ArrayList<>();
    ArrayList<IFrontendActionAsyncCallback> callbacks = new ArrayList<>();

    IFrontendActionAsyncCallback onFinishCallback =
        callback != null
            ? callback
            : new IFrontendActionAsyncCallback() {
              @Override
              public void executed(FrontendActionAsyncResult result) {
                NewDiskModel diskModel = (NewDiskModel) result.getState();
                diskModel.stopProgress();
                diskModel.cancel();
              }
            };

    List<EntityModel<DiskModel>> disksToAttach = getSelectedDisks();
    for (int i = 0; i < disksToAttach.size(); i++) {
      DiskModel disk = disksToAttach.get(i).getEntity();

      /*
      IDE disks can be activated only when the VM is down.
      Other disks can be hot plugged.
       */
      boolean activate = false;
      if (getIsPlugged().getEntity()) {
        activate =
            disk.getDisk().getDiskInterface() == DiskInterface.IDE
                ? getVm().getStatus() == VMStatus.Down
                : true;
      }

      // Disk is attached to VM as read only or not, null is applicable only for floating disks
      // but this is not a case here.
      AttachDetachVmDiskParameters parameters =
          new AttachDetachVmDiskParameters(
              getVm().getId(),
              disk.getDisk().getId(),
              activate,
              Boolean.TRUE.equals(disk.getDisk().getReadOnly()));

      actionTypes.add(VdcActionType.AttachDiskToVm);
      paramerterList.add(parameters);
      callbacks.add(i == disksToAttach.size() - 1 ? onFinishCallback : null);
    }

    startProgress();

    Frontend.getInstance().runMultipleActions(actionTypes, paramerterList, callbacks, null, this);
  }