public AppManagerServiceImpl( AppFactory appFactory, DataService dataService, FileStore fileStore, Gson gson, PluginFactory pluginFactory) { this.appFactory = requireNonNull(appFactory); this.dataService = requireNonNull(dataService); this.fileStore = requireNonNull(fileStore); this.gson = requireNonNull(gson); this.pluginFactory = requireNonNull(pluginFactory); fileStore.createDirectory(APPS_DIR); fileStore.createDirectory(APPS_TMP_DIR); }
@Override public String extractFileContent(String appDir, String fileName) { File indexFile = fileStore.getFile(appDir + separator + fileName); return utf8Encodedfiletostring(indexFile); }
@Override public File downloadFile(String url, String folderName, String fileName) { try { File folder = new File(fileStore.getStorageDir(), folderName); folder.mkdir(); try (InputStream in = new URL(url).openStream()) { String filename = folderName + '/' + fileName; return fileStore.store(in, filename); } } catch (IOException e) { throw new UncheckedIOException(e); } } }
private FileMeta createStyleSheetFileMeta(String fileName, InputStream data) throws MolgenisStyleException { String fileId = idGenerator.generateId(); try { fileStore.store(data, fileId); } catch (IOException e) { throw new MolgenisStyleException("Unable to save style file with name : " + fileName, e); } FileMeta fileMeta = fileMetaFactory.create(fileId); fileMeta.setContentType("css"); fileMeta.setFilename(fileName); fileMeta.setSize(fileStore.getFile(fileId).length()); fileMeta.setUrl(buildFileUrl(fileId)); dataService.add(FileMetaMetaData.FILE_META, fileMeta); return fileMeta; }
if (appSourceArchive != null) File fileStoreFile = fileStore.getFile(appSourceArchive.getId()); if (fileStoreFile == null) LOG.error("Source archive '{}' for app '{}' missing in file store", appSourceArchive.getId(), app.getName()); throw new RuntimeException("An error occurred trying to activate app"); fileStore.getStorageDir() + separatorChar + FILE_STORE_PLUGIN_APPS_PATH + separatorChar + app.getId() + separatorChar);
@Override public String uploadApp(InputStream zipData, String zipFileName, String formFieldName) throws IOException { String tempFilesDir = "extracted_" + zipFileName; String tempAppDirectoryName = APPS_TMP_DIR + separator + tempFilesDir; fileStore.createDirectory(tempAppDirectoryName); try { ZipFileUtil.unzip(zipData, fileStore.getFile(tempAppDirectoryName)); } catch (UnzipException unzipException) { fileStore.delete(tempAppDirectoryName); throw new InvalidAppArchiveException(formFieldName, unzipException); } List<String> missingRequiredFilesList = buildMissingRequiredFiles(tempAppDirectoryName); if (!missingRequiredFilesList.isEmpty()) { fileStore.deleteDirectory(APPS_TMP_DIR); throw new AppArchiveMissingFilesException(missingRequiredFilesList); } return tempAppDirectoryName; }
private File fileLocationToStoredRenamedFile(String fileLocation, String entityTypeId) throws IOException { String filename = fileLocation.substring(fileLocation.lastIndexOf('/') + 1); URL url = new URL(fileLocation); try (InputStream is = url.openStream()) { return fileStore.store(is, getFilename(filename, entityTypeId)); } }
@Override @RunAsSystem public FileSystemResource getThemeData(String styleName, BootstrapVersion bootstrapVersion) throws MolgenisStyleException { StyleSheet styleSheet = findThemeByName(styleName); if (styleSheet == null) { throw new MolgenisStyleException("No theme found for with name: " + styleName); } // Fetch the theme file from the store. FileMeta fileMeta; if (bootstrapVersion.equals(BOOTSTRAP_VERSION_3)) { fileMeta = styleSheet.getBootstrap3Theme(); } else { fileMeta = styleSheet.getBootstrap4Theme(); // If no bootstrap 4 theme was set fetch the default theme from the resources folder if (fileMeta == null) { StyleSheet fallBackTheme = findThemeByName(BOOTSTRAP_FALL_BACK_THEME); fileMeta = fallBackTheme.getBootstrap4Theme(); } } File file = fileStore.getFile(fileMeta.getId()); return new FileSystemResource(file); }
.addResourceHandler("/" + PATH_SEGMENT_APPS + "/**") .addResourceLocations( "file:///" + fileStore.getStorageDir() + '/' + FILE_STORE_PLUGIN_APPS_PATH + '/'); registry .addResourceHandler("/webjars/**")
/** * Registers the OntologyRepositorySource factory so it can be used by * DataService.createFileRepositorySource(File file); */ @PostConstruct public void registerOntologyRepositorySource() { fileRepositorySourceFactory.addFileRepositoryCollectionClass( OntologyRepositoryCollection.class, OntologyFileExtensions.getOntology()); } }
private void deactivateApp(App app) { try { //noinspection StringConcatenationMissingWhitespace fileStore.deleteDirectory(FILE_STORE_PLUGIN_APPS_PATH + separatorChar + app.getId()); } catch (IOException e) { LOG.error("", e); throw new RuntimeException(format("An error occurred deactivating app '%s'", app.getName())); } }
@Bean public FileStore fileStore() { // get molgenis home directory Path appDataRoot = AppDataRootProvider.getAppDataRoot(); // create molgenis store directory in molgenis data directory if not exists String molgenisFileStoreDirStr = Paths.get(appDataRoot.toString(), "data", "filestore").toString(); File molgenisDataDir = new File(molgenisFileStoreDirStr); if (!molgenisDataDir.exists() && !molgenisDataDir.mkdirs()) { throw new UncheckedIOException( new IOException("failed to create directory: " + molgenisFileStoreDirStr)); } return new FileStore(molgenisFileStoreDirStr); }
private File storeFile( FileStore fileStore, String key, String extension, String targetEntityName, String jobIdentifier, InputStream in) throws IOException { // no extension given, default is excel if (!StringUtils.isNotEmpty(extension)) { extension = "xlsx"; } String relativePath = "bucket_" + jobIdentifier; File folder = new File(fileStore.getStorageDir(), relativePath); folder.mkdir(); String filename; if (StringUtils.isNotEmpty(targetEntityName) && !ExcelFileExtensions.getExcel().contains(extension)) { filename = String.format("%s%s%s.%s", relativePath, File.separatorChar, targetEntityName, extension); } else { String fileRoot = key.replaceAll("[\\/:*?\"<>|]", "_"); filename = String.format("%s%s%s.%s", relativePath, File.separatorChar, fileRoot, extension); } return fileStore.store(in, filename); }
private List<String> buildMissingRequiredFiles(String appDirectoryName) { List<String> missingFromArchive = newArrayList(); File indexFile = fileStore.getFile(appDirectoryName + separator + ZIP_INDEX_FILE); if (!indexFile.exists()) { missingFromArchive.add(ZIP_INDEX_FILE); } File configFile = fileStore.getFile(appDirectoryName + separator + ZIP_CONFIG_FILE); if (!configFile.exists()) { missingFromArchive.add(ZIP_CONFIG_FILE); } return missingFromArchive; }
@ResponseBody @PostMapping(value = "/upload", produces = MediaType.TEXT_HTML_VALUE) public String importFile(@RequestParam(value = "file") MultipartFile multipartFile) throws IOException { String filename = multipartFile.getOriginalFilename(); try (InputStream inputStream = multipartFile.getInputStream()) { fileStore.store(inputStream, filename); } OneClickImportJobExecution jobExecution = oneClickImportJobExecutionFactory.create(); jobExecution.setFile(filename); jobExecutor.submit(jobExecution); return concatEntityHref(jobExecution); }
/** * Registers the CsvRepositorySource factory so it can be used by * DataService.createFileRepositorySource(File file); */ @PostConstruct public void registerCsvRepositorySource() { fileRepositorySourceFactory.addFileRepositoryCollectionClass( CsvRepositoryCollection.class, CsvFileExtensions.getCSV()); } }
private void serveAppResource( HttpServletResponse response, String wildCardPath, AppResponse appResponse) throws IOException { File requestedResource = fileStore.getFile(appResponse.getResourceFolder() + wildCardPath); response.setContentType(guessMimeType(requestedResource.getName())); response.setContentLength((int) requestedResource.length()); response.setHeader( CONTENT_DISPOSITION, "attachment; filename=" + requestedResource.getName().replace(" ", "_")); try (InputStream is = new FileInputStream(requestedResource)) { FileCopyUtils.copy(is, response.getOutputStream()); } }
/** Get a file from the logo subdirectory of the filestore */ @GetMapping("/logo/{name}.{extension}") public void getLogo( OutputStream out, @PathVariable("name") String name, @PathVariable("extension") String extension, HttpServletResponse response) throws IOException { File f = fileStore.getFile("/logo/" + name + "." + extension); if (!f.exists()) { response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } // Try to get contenttype from file String contentType = URLConnection.guessContentTypeFromName(f.getName()); if (contentType != null) { response.setContentType(contentType); } FileCopyUtils.copy(new FileInputStream(f), out); } }
@Override @Transactional public void deleteApp(String id) { App app = getAppById(id); if (app.isActive()) { deactivateApp(app); } try { deleteDirectory(fileStore.getFile(app.getResourceFolder())); } catch (IOException err) { throw new CouldNotDeleteAppException(id); } }
public FileMeta download( List<ResourceIdentifier> resourceIdentifiers, String filename, Progress progress) { FileMeta fileMeta; try { ResourceCollection resourceCollection = resourceCollector.get(resourceIdentifiers); File emxFile = fileStore.getFile(filename); fileMeta = createFileMeta(emxFile); dataService.add(FileMetaMetaData.FILE_META, fileMeta); emxExportService.export( resourceCollection.getEntityTypes(), resourceCollection.getPackages(), emxFile.toPath(), progress); progress.increment(1); progress.status(getMessage("progress-download-success", "Finished preparing download.")); } catch (RuntimeException exception) { throw new DownloadFailedException(exception); } return fileMeta; }