/**
  * Stops recording.
  *
  * @throws SerializationException If serialization fails during write {@link StorageData} to disk.
  * @throws IOException If IOException occurs during write {@link StorageData} to disk.
  * @throws BusinessException If {@link BusinessException} is throw during auto-finalize process.
  */
 public void stopRecording() throws IOException, SerializationException, BusinessException {
   synchronized (this) {
     if (storageRecorder.isRecordingOn() || storageRecorder.isRecordingScheduled()) {
       boolean autoFinalize = storageRecorder.getRecordingProperties().isAutoFinalize();
       StorageWriter storageWriter = storageRecorder.getStorageWriter();
       storageRecorder.stopRecording();
       recorderStorageData.markOpened();
       openedStoragesMap.put(recorderStorageData, storageWriter);
       if (autoFinalize) {
         this.closeStorage(recorderStorageData);
       }
       writeStorageDataToDisk(recorderStorageData);
       recorderStorageData = null; // NOPMD
     }
   }
 }
 /**
  * Opens existing storage if it is not already opened.
  *
  * @param storageData Storage to open.
  * @return {@link StorageWriter} created for this storage. Of <code>null</code> if no new writer
  *     is created.
  * @throws IOException If {@link IOException} occurs.
  * @throws SerializationException If exception occurs during update of storage data.
  * @throws BusinessException If provided storage data does not exist or if the storage is closed.
  */
 public StorageWriter openStorage(StorageData storageData)
     throws IOException, SerializationException, BusinessException {
   StorageData local = getLocalStorageDataObject(storageData);
   synchronized (local) {
     if (isStorageClosed(local)) {
       throw new BusinessException(
           "Open the storage " + local + ".", StorageErrorCodeEnum.STORAGE_ALREADY_CLOSED);
     }
     if (!isStorageOpen(local)) {
       local.markOpened();
       StorageWriter writer = storageWriterProvider.getCmrStorageWriter();
       openedStoragesMap.put(local, writer);
       writer.prepareForWrite(local);
       writeStorageDataToDisk(local);
       return writer;
     }
   }
   return null;
 }