esoe
6 months ago
11 changed files with 277 additions and 6 deletions
@ -0,0 +1,10 @@ |
|||||||
|
package ru.molokoin.explorer_rs.controller; |
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
|
||||||
|
@Controller |
||||||
|
@RequestMapping(path = "/stroage") |
||||||
|
public class StorageController { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package ru.molokoin.explorer_rs.entity; |
||||||
|
|
||||||
|
import jakarta.persistence.Entity; |
||||||
|
import jakarta.persistence.GeneratedValue; |
||||||
|
import jakarta.persistence.GenerationType; |
||||||
|
import jakarta.persistence.Id; |
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
|
||||||
|
@NoArgsConstructor |
||||||
|
@AllArgsConstructor |
||||||
|
@Entity |
||||||
|
@Data |
||||||
|
public class Document { |
||||||
|
@Id |
||||||
|
@GeneratedValue(strategy=GenerationType.AUTO) |
||||||
|
private long id; |
||||||
|
private String name;//наименование файла в файловой системе ({id}.{extension})
|
||||||
|
private String name_origin;//оригинальное название загруженного файл
|
||||||
|
private String path;//путь в файловой системе (root/{id}.{extension})
|
||||||
|
private String extension;//расширение файла
|
||||||
|
private long size;//размер файла
|
||||||
|
|
||||||
|
/** |
||||||
|
* @param name |
||||||
|
* @param name_origin |
||||||
|
* @param path |
||||||
|
* @param extension |
||||||
|
* @param size |
||||||
|
*/ |
||||||
|
public Document(String name, String name_origin, String path, String extension, long size) { |
||||||
|
this.name = name; |
||||||
|
this.name_origin = name_origin; |
||||||
|
this.path = path; |
||||||
|
this.extension = extension; |
||||||
|
this.size = size; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
package ru.molokoin.explorer_rs.entity; |
||||||
|
|
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
import org.hibernate.annotations.OnDelete; |
||||||
|
import org.hibernate.annotations.OnDeleteAction; |
||||||
|
|
||||||
|
import jakarta.persistence.CascadeType; |
||||||
|
import jakarta.persistence.Entity; |
||||||
|
import jakarta.persistence.FetchType; |
||||||
|
import jakarta.persistence.GeneratedValue; |
||||||
|
import jakarta.persistence.GenerationType; |
||||||
|
import jakarta.persistence.Id; |
||||||
|
import jakarta.persistence.JoinColumn; |
||||||
|
import jakarta.persistence.OneToOne; |
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
|
||||||
|
@NoArgsConstructor |
||||||
|
@AllArgsConstructor |
||||||
|
@Entity |
||||||
|
@Data |
||||||
|
public class Record { |
||||||
|
@Id |
||||||
|
@GeneratedValue(strategy=GenerationType.AUTO) |
||||||
|
private long id; |
||||||
|
private String type;//тип загруженного документа (реестр, заявка, протокол ...)
|
||||||
|
private String author; |
||||||
|
private Date berth;//дата и время создания записи
|
||||||
|
private String description;//Пояснения автора записи
|
||||||
|
|
||||||
|
/** |
||||||
|
* Связь один к одному с таблицей данных файловой системы |
||||||
|
*/ |
||||||
|
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) |
||||||
|
@OnDelete(action = OnDeleteAction.SET_NULL) |
||||||
|
@JoinColumn(name = "document_id", nullable = true) |
||||||
|
private Document document; |
||||||
|
|
||||||
|
/** |
||||||
|
* Конструктор без id |
||||||
|
* @param type |
||||||
|
* @param author |
||||||
|
* @param berth |
||||||
|
* @param description |
||||||
|
* @param document |
||||||
|
*/ |
||||||
|
public Record(String type, String author, Date berth, String description, Document document) { |
||||||
|
this.type = type; |
||||||
|
this.author = author; |
||||||
|
this.berth = berth; |
||||||
|
this.description = description; |
||||||
|
this.document = document; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package ru.molokoin.explorer_rs.repository; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.springframework.data.repository.ListCrudRepository; |
||||||
|
import org.springframework.stereotype.Repository; |
||||||
|
|
||||||
|
import ru.molokoin.explorer_rs.entity.Document; |
||||||
|
|
||||||
|
@Repository |
||||||
|
public interface DocumentFace extends ListCrudRepository<Document, Long>{ |
||||||
|
List<Document> findAll(); |
||||||
|
Document findDocumentById(long id); |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package ru.molokoin.explorer_rs.repository; |
||||||
|
|
||||||
|
public interface RecordFace { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,83 @@ |
|||||||
|
package ru.molokoin.explorer_rs.service; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.nio.file.Files; |
||||||
|
import java.nio.file.Path; |
||||||
|
import java.nio.file.Paths; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.core.io.Resource; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct; |
||||||
|
import ru.molokoin.explorer_rs.config.StorageProperties; |
||||||
|
import ru.molokoin.explorer_rs.exception.StorageException; |
||||||
|
|
||||||
|
/** |
||||||
|
* Класс доступа к данным файловой системы |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
public class FileSystemStorage implements StorageFace{ |
||||||
|
private final Path root; //путь к корню хранилища данных
|
||||||
|
|
||||||
|
/** |
||||||
|
* Конструктор, инициирующий путь к корню хранилиа данных, |
||||||
|
* установленный файлом настроек приложения |
||||||
|
* @param properties |
||||||
|
*/ |
||||||
|
@Autowired |
||||||
|
public FileSystemStorage(StorageProperties properties) { |
||||||
|
this.root = Paths.get(properties.getLocation()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* При запуске сервера создаем корневую директорию, |
||||||
|
* для хранения данных приложения |
||||||
|
*/ |
||||||
|
@PostConstruct |
||||||
|
@Override |
||||||
|
public void init() { |
||||||
|
try { |
||||||
|
Files.createDirectories(root); |
||||||
|
} catch (IOException e) { |
||||||
|
throw new StorageException("Could not initialize storage location", e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<Resource> list() { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'list'"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void clear() { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'clear'"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Resource load(long id) { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'load'"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean delete(long id) { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'delete'"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean store(Resource resource) { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'store'"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean store(List<Resource> resources) { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'store'"); |
||||||
|
} |
||||||
|
} |
@ -1,4 +1,4 @@ |
|||||||
package ru.molokoin.explorer_rs.repository; |
package ru.molokoin.explorer_rs.service; |
||||||
|
|
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
import java.io.InputStream; |
import java.io.InputStream; |
@ -0,0 +1,65 @@ |
|||||||
|
package ru.molokoin.explorer_rs.service; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.springframework.core.io.Resource; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Интерфейс для работы файловым хранилищем |
||||||
|
* - инициализация пути к файловому хранилищу на хосте |
||||||
|
* - получение списка файлов с хоста |
||||||
|
* - получение файла по id |
||||||
|
* - получениефайла по name |
||||||
|
* - удаление файла |
||||||
|
* |
||||||
|
*/ |
||||||
|
public interface StorageFace { |
||||||
|
/** |
||||||
|
* создание на хосте корневой директории, для файлового хранилища: |
||||||
|
* путь к корневой директории устанавливается конфигурацией сервера |
||||||
|
* properties - файлом |
||||||
|
*/ |
||||||
|
public void init(); |
||||||
|
|
||||||
|
/** |
||||||
|
* Получение фактического списка файлов с хоста |
||||||
|
* файлы на хост могут попадать разными путями и нужно иметь возможность |
||||||
|
* сравнить фактический список с данными базы данных |
||||||
|
* получить список размещенных на хосте и не зарегистрированных в базе файлов |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<Resource> list(); |
||||||
|
|
||||||
|
/** |
||||||
|
* Удаление всех файлов, очистка хранилища |
||||||
|
*/ |
||||||
|
public void clear(); |
||||||
|
|
||||||
|
/** |
||||||
|
* Получение ресурса из хранилища |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public Resource load(long id); |
||||||
|
|
||||||
|
/** |
||||||
|
* Удаление файла из хранилища |
||||||
|
* @param id |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public boolean delete(long id); |
||||||
|
|
||||||
|
/** |
||||||
|
* Сохранение файла в хранилище |
||||||
|
* @param resource |
||||||
|
*/ |
||||||
|
public boolean store(Resource resource); |
||||||
|
|
||||||
|
/** |
||||||
|
* Сохранение группы ресурсов в хранилище |
||||||
|
* @param resources |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public boolean store(List<Resource> resources); |
||||||
|
} |
@ -1,4 +1,4 @@ |
|||||||
package ru.molokoin.explorer_rs.repository; |
package ru.molokoin.explorer_rs.service; |
||||||
|
|
||||||
import org.springframework.core.io.Resource; |
import org.springframework.core.io.Resource; |
||||||
import org.springframework.web.multipart.MultipartFile; |
import org.springframework.web.multipart.MultipartFile; |
Loading…
Reference in new issue