001 package de.deepamehta.plugins.files.service; 002 003 import de.deepamehta.plugins.files.DirectoryListing; 004 import de.deepamehta.plugins.files.ResourceInfo; 005 import de.deepamehta.plugins.files.StoredFile; 006 import de.deepamehta.plugins.files.UploadedFile; 007 008 import de.deepamehta.core.Topic; 009 import de.deepamehta.core.service.PluginService; 010 011 import java.io.File; 012 import java.io.InputStream; 013 import java.net.URL; 014 015 016 017 public interface FilesService extends PluginService { 018 019 020 021 // === File System Representation === 022 023 /** 024 * Creates and returns a File topic representing the file at a given repository path. 025 * If such a File topic exists already that topic is returned. 026 * 027 * @param path A repository path. Relative to the repository base path. 028 * Must begin with slash, no slash at the end. 029 */ 030 Topic createFileTopic(String path); 031 032 /** 033 * Creates and returns a Folder topic representing the folder at a given repository path. 034 * If such a Folder topic exists already that topic is returned. 035 * 036 * @param path A repository path. Relative to the repository base path. 037 * Must begin with slash, no slash at the end. 038 */ 039 Topic createFolderTopic(String path); 040 041 // --- 042 043 Topic createChildFileTopic(long folderTopicId, String path); 044 045 Topic createChildFolderTopic(long folderTopicId, String path); 046 047 048 049 // === File Repository === 050 051 /** 052 * Receives an uploaded file, stores it in the file repository, and creates a corresponding File topic. 053 * 054 * @param path The directory where to store the uploaded file. 055 * A repository path. Relative to the repository base path. 056 * Must begin with slash, no slash at the end. 057 * The directory must exist. 058 * 059 * @return a StoredFile object which holds 2 information: the name of the uploaded file, and the ID 060 * of the created File topic. 061 */ 062 StoredFile storeFile(UploadedFile file, String path); 063 064 /** 065 * Creates a file in the file repository, and creates a corresponding File topic. 066 * 067 * @param in The input stream the file content is read from. 068 * @param path The path and filename of the file to be created. 069 * A repository path. Relative to the repository base path. 070 * Must begin with slash, no slash at the end. 071 * If that file exists already it is overwritten. ### TODO: rethink overwriting 072 * 073 * @return the File topic that corresponds to the created file. 074 */ 075 Topic createFile(InputStream in, String path); 076 077 /** 078 * Creates a folder in the file repository. 079 * Note: to corresponding Folder topic is created. 080 * 081 * @param path The directory where to create the folder. 082 * A repository path. Relative to the repository base path. 083 * Must begin with slash, no slash at the end. 084 */ 085 void createFolder(String folderName, String path); 086 087 // --- 088 089 ResourceInfo getResourceInfo(String path); 090 091 DirectoryListing getDirectoryListing(String path); 092 093 /** 094 * Checks if the given URL refers to the file repository of this DeepaMehta installation. 095 * 096 * @return the refered file's/directory's repository path, or <code>null</code> if the URL 097 * does not refer to the file repository of this DeepaMehta installation. 098 */ 099 String getRepositoryPath(URL url); 100 101 // --- 102 103 /** 104 * Accesses a file/directory in the file repository by the given repository path. 105 * Note: this method doesn't require the corresponding File/Folder topic to exist. 106 * 107 * @param path A repository path. Relative to the repository base path. 108 * Must begin with slash, no slash at the end. 109 */ 110 File getFile(String path); 111 112 /** 113 * Accesses a file/directory in the file repository that is represented by the given File/Folder topic. 114 */ 115 File getFile(long fileTopicId); 116 117 // --- 118 119 void openFile(long fileTopicId); 120 }