protected File lookupAssetAndCreateLocalFile(StaticAsset staticAsset, File baseLocalFile)
     throws IOException, SQLException {
   if (StorageType.FILESYSTEM.equals(staticAsset.getStorageType())) {
     return broadleafFileService.getResource(staticAsset.getFullUrl());
   } else {
     StaticAssetStorage storage = readStaticAssetStorageByStaticAssetId(staticAsset.getId());
     if (storage != null) {
       InputStream is = storage.getFileData().getBinaryStream();
       createLocalFileFromInputStream(is, baseLocalFile);
     }
   }
   return baseLocalFile;
 }
 @Override
 public void delete(StaticAssetStorage assetStorage) {
   if (!em.contains(assetStorage)) {
     assetStorage = (StaticAssetStorage) readStaticAssetStorageById(assetStorage.getId());
   }
   em.remove(assetStorage);
 }
  @Transactional("blTransactionManagerAssetStorageInfo")
  @Override
  public void createStaticAssetStorageFromFile(MultipartFile file, StaticAsset staticAsset)
      throws IOException {
    if (StorageType.DATABASE.equals(staticAsset.getStorageType())) {
      StaticAssetStorage storage = staticAssetStorageDao.create();
      storage.setStaticAssetId(staticAsset.getId());
      Blob uploadBlob = staticAssetStorageDao.createBlob(file);
      storage.setFileData(uploadBlob);
      staticAssetStorageDao.save(storage);
    } else if (StorageType.FILESYSTEM.equals(staticAsset.getStorageType())) {
      FileWorkArea tempWorkArea = broadleafFileService.initializeWorkArea();
      String destFileName =
          tempWorkArea.getFilePathLocation() + removeLeadingSlash(staticAsset.getFullUrl());

      InputStream input = file.getInputStream();
      byte[] buffer = new byte[fileBufferSize];

      File destFile = new File(destFileName);
      if (!destFile.getParentFile().exists()) {
        if (!destFile.getParentFile().mkdirs()) {
          throw new RuntimeException(
              "Unable to create parent directories for file: " + destFileName);
        }
      }

      OutputStream output = new FileOutputStream(destFile);
      boolean deleteFile = false;
      try {
        int bytesRead;
        int totalBytesRead = 0;
        while ((bytesRead = input.read(buffer)) != -1) {
          totalBytesRead += bytesRead;
          if (totalBytesRead > maxUploadableFileSize) {
            deleteFile = true;
            throw new IOException("Maximum Upload File Size Exceeded");
          }
          output.write(buffer, 0, bytesRead);
        }

        broadleafFileService.addOrUpdateResource(tempWorkArea, destFile, true);
      } finally {
        output.close();
        broadleafFileService.closeWorkArea(tempWorkArea);
      }
    }
  }