protected void updateReadOnlyChangeability() {
    DiskInterface diskInterface = getDiskInterface().getSelectedItem();

    if (diskInterface == DiskInterface.IDE) {
      getIsReadOnly()
          .setChangeProhibitionReason(constants.cannotEnableIdeInterfaceForReadOnlyDisk());
      getIsReadOnly().setIsChangeable(false);
      getIsReadOnly().setEntity(false);
      return;
    }

    boolean isDirectLUN = getDiskStorageType().getEntity() == DiskStorageType.LUN;
    boolean isScsiPassthrough = getIsScsiPassthrough().getEntity();
    if (diskInterface == DiskInterface.VirtIO_SCSI && isDirectLUN && isScsiPassthrough) {
      getIsReadOnly()
          .setChangeProhibitionReason(constants.cannotEnableReadonlyWhenScsiPassthroughEnabled());
      getIsReadOnly().setIsChangeable(false);
      getIsReadOnly().setEntity(false);
      return;
    }

    if (isVmAttachedToPool() && !getIsNew()) {
      getIsReadOnly().setIsChangeable(false);
    } else {
      getIsReadOnly().setIsChangeable(isEditEnabled());
    }
    getIsReadOnly().setEntity(getIsNew() ? Boolean.FALSE : getDisk().getReadOnly());
  }