Browse Source

file-explorer in work

master
esoe 6 months ago
parent
commit
bee2ef831f
  1. 2
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java
  2. 4
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/PackageController.java
  3. 10
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/StorageController.java
  4. 39
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Document.java
  5. 57
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Record.java
  6. 14
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/DocumentFace.java
  7. 5
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/RecordFace.java
  8. 83
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorage.java
  9. 2
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorageService.java
  10. 65
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageFace.java
  11. 2
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageService.java

2
explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java

@ -19,7 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import ru.molokoin.explorer_rs.entity.FileResponse; import ru.molokoin.explorer_rs.entity.FileResponse;
import ru.molokoin.explorer_rs.repository.StorageService; import ru.molokoin.explorer_rs.service.StorageService;
@Controller @Controller
@RequestMapping(path = "/explorer_rs") @RequestMapping(path = "/explorer_rs")

4
explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/PackageController.java

@ -1,7 +1,5 @@
package ru.molokoin.explorer_rs.controller; package ru.molokoin.explorer_rs.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -56,7 +54,7 @@ public class PackageController {
} }
@DeleteMapping("/package/delete/{id}") @DeleteMapping("/package/delete/{id}")
public ResponseEntity<String> deletePackage(@PathVariable Long id){ public ResponseEntity<?> deletePackage(@PathVariable Long id){
Package p = repo.findPackageById(id); Package p = repo.findPackageById(id);
repo.delete(p); repo.delete(p);
return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK); return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK);

10
explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/StorageController.java

@ -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 {
}

39
explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Document.java

@ -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;
}
}

57
explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Record.java

@ -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;
}
}

14
explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/DocumentFace.java

@ -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);
}

5
explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/RecordFace.java

@ -0,0 +1,5 @@
package ru.molokoin.explorer_rs.repository;
public interface RecordFace {
}

83
explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorage.java

@ -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'");
}
}

2
explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/FileSystemStorageService.java → explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorageService.java

@ -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;

65
explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageFace.java

@ -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);
}

2
explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/StorageService.java → explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageService.java

@ -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…
Cancel
Save