esoe
1 year ago
12 changed files with 305 additions and 1 deletions
@ -1,7 +1,7 @@ |
|||||||
# Storage-service |
# Storage-service |
||||||
Сервис обмена файлами большого размера |
Сервис обмена файлами большого размера |
||||||
|
|
||||||
API |
## API |
||||||
- getFile |
- getFile |
||||||
- postFile |
- postFile |
||||||
- deleteFile |
- deleteFile |
@ -0,0 +1,95 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
|
||||||
|
<groupId>ru.molokoin</groupId> |
||||||
|
<artifactId>storage</artifactId> |
||||||
|
<version>1.0</version> |
||||||
|
<packaging>war</packaging> |
||||||
|
|
||||||
|
<name>storage Maven Webapp</name> |
||||||
|
<!-- FIXME change it to the project's website --> |
||||||
|
<url>http://www.example.com</url> |
||||||
|
|
||||||
|
<properties> |
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||||
|
<maven.compiler.source>1.7</maven.compiler.source> |
||||||
|
<maven.compiler.target>1.7</maven.compiler.target> |
||||||
|
</properties> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>jakarta.ejb</groupId> |
||||||
|
<artifactId>jakarta.ejb-api</artifactId> |
||||||
|
<version>4.0.0</version> |
||||||
|
<scope>provided</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>jakarta.persistence</groupId> |
||||||
|
<artifactId>jakarta.persistence-api</artifactId> |
||||||
|
<version>3.0.0</version> |
||||||
|
<scope>provided</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>jakarta.servlet</groupId> |
||||||
|
<artifactId>jakarta.servlet-api</artifactId> |
||||||
|
<version>5.0.0</version> |
||||||
|
<scope>provided</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>jakarta.ws.rs</groupId> |
||||||
|
<artifactId>jakarta.ws.rs-api</artifactId> |
||||||
|
<version>3.1.0</version> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>jakarta.xml.bind</groupId> |
||||||
|
<artifactId>jakarta.xml.bind-api</artifactId> |
||||||
|
<version>4.0.0</version> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>junit</groupId> |
||||||
|
<artifactId>junit</artifactId> |
||||||
|
<version>4.11</version> |
||||||
|
<scope>test</scope> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
<build> |
||||||
|
<finalName>storage</finalName> |
||||||
|
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<artifactId>maven-clean-plugin</artifactId> |
||||||
|
<version>3.1.0</version> |
||||||
|
</plugin> |
||||||
|
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> |
||||||
|
<plugin> |
||||||
|
<artifactId>maven-resources-plugin</artifactId> |
||||||
|
<version>3.0.2</version> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.8.0</version> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<artifactId>maven-surefire-plugin</artifactId> |
||||||
|
<version>2.22.1</version> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<artifactId>maven-war-plugin</artifactId> |
||||||
|
<version>3.2.2</version> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<artifactId>maven-install-plugin</artifactId> |
||||||
|
<version>2.5.2</version> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<artifactId>maven-deploy-plugin</artifactId> |
||||||
|
<version>2.8.2</version> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</pluginManagement> |
||||||
|
</build> |
||||||
|
</project> |
@ -0,0 +1,17 @@ |
|||||||
|
package ru.molokoin.storage.api; |
||||||
|
|
||||||
|
import jakarta.ws.rs.ApplicationPath; |
||||||
|
import jakarta.ws.rs.core.Application; |
||||||
|
|
||||||
|
import java.util.HashSet; |
||||||
|
import java.util.Set; |
||||||
|
|
||||||
|
@ApplicationPath("api") |
||||||
|
public class RestConfig extends Application { |
||||||
|
@Override |
||||||
|
public Set<Class<?>> getClasses() { |
||||||
|
Set<Class<?>> resources = new HashSet<>(); |
||||||
|
resources.add(RestStorageService.class); |
||||||
|
return resources; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package ru.molokoin.storage.api; |
||||||
|
|
||||||
|
import java.util.Collection; |
||||||
|
|
||||||
|
import jakarta.ejb.EJB; |
||||||
|
import jakarta.ws.rs.GET; |
||||||
|
import jakarta.ws.rs.Path; |
||||||
|
import jakarta.ws.rs.Produces; |
||||||
|
import jakarta.ws.rs.core.MediaType; |
||||||
|
import ru.molokoin.storage.entities.ContentEntity; |
||||||
|
import ru.molokoin.storage.services.RepositoryFace; |
||||||
|
|
||||||
|
@Path("content") |
||||||
|
public class RestStorageService { |
||||||
|
@EJB |
||||||
|
private RepositoryFace repository; |
||||||
|
|
||||||
|
/** |
||||||
|
* Получение сведений о всех файлах в хранилище. |
||||||
|
* Данные предоставляются в формате *.xml |
||||||
|
* - имя файла |
||||||
|
* - размер в мегабайтах |
||||||
|
* - расширение (*.pdf, *.docx, *.mp3) |
||||||
|
* - путь к файлу в хранилище (дерево директорий: path) |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@GET |
||||||
|
@Produces(MediaType.APPLICATION_XML) |
||||||
|
public Collection<ContentEntity> getFiles(){ |
||||||
|
System.out.println("Передача данных обо всех файлах ..."); |
||||||
|
Collection<ContentEntity> cce = repository.getInfo(); |
||||||
|
return cce; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,112 @@ |
|||||||
|
package ru.molokoin.storage.entities; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
import jakarta.persistence.Basic; |
||||||
|
import jakarta.persistence.Column; |
||||||
|
import jakarta.persistence.Entity; |
||||||
|
import jakarta.persistence.GeneratedValue; |
||||||
|
import jakarta.persistence.GenerationType; |
||||||
|
import jakarta.persistence.Id; |
||||||
|
import jakarta.persistence.Table; |
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement; |
||||||
|
|
||||||
|
/** |
||||||
|
* Сущность (модель) |
||||||
|
* содержащая сведения об отдельном файле |
||||||
|
*/ |
||||||
|
@Entity |
||||||
|
@XmlRootElement(name = "storage") |
||||||
|
@Table(name = "Storage", schema = "j200", catalog = "")//поправить схему
|
||||||
|
public class ContentEntity implements Serializable{ |
||||||
|
@Id //уникальный идентификатор строки
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY) |
||||||
|
@Basic(optional = false) //не может быть null
|
||||||
|
@Column(name = "id") |
||||||
|
Long id; //Идентификатор файла
|
||||||
|
|
||||||
|
@Basic(optional = false) //не может быть null
|
||||||
|
@Column(name = "filename", length = 300) |
||||||
|
String filename; //Наименование файла
|
||||||
|
|
||||||
|
@Basic(optional = false) //не может быть null
|
||||||
|
@Column(name = "location", length = 1000) |
||||||
|
String location; //Путь к файлу на локальной машине
|
||||||
|
|
||||||
|
byte[] content; //массив байткода - содержимое файла
|
||||||
|
|
||||||
|
public Long getId() { |
||||||
|
return id; |
||||||
|
} |
||||||
|
|
||||||
|
public void setId(Long id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
|
||||||
|
public String getFilename() { |
||||||
|
return filename; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFilename(String filename) { |
||||||
|
this.filename = filename; |
||||||
|
} |
||||||
|
|
||||||
|
public String getLocation() { |
||||||
|
return location; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLocation(String location) { |
||||||
|
this.location = location; |
||||||
|
} |
||||||
|
|
||||||
|
public byte[] getContent() { |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContent(byte[] content) { |
||||||
|
this.content = content; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int hashCode() { |
||||||
|
final int prime = 31; |
||||||
|
int result = 1; |
||||||
|
result = prime * result + ((id == null) ? 0 : id.hashCode()); |
||||||
|
result = prime * result + ((filename == null) ? 0 : filename.hashCode()); |
||||||
|
result = prime * result + ((location == null) ? 0 : location.hashCode()); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean equals(Object obj) { |
||||||
|
if (this == obj) |
||||||
|
return true; |
||||||
|
if (obj == null) |
||||||
|
return false; |
||||||
|
if (getClass() != obj.getClass()) |
||||||
|
return false; |
||||||
|
ContentEntity other = (ContentEntity) obj; |
||||||
|
if (id == null) { |
||||||
|
if (other.id != null) |
||||||
|
return false; |
||||||
|
} else if (!id.equals(other.id)) |
||||||
|
return false; |
||||||
|
if (filename == null) { |
||||||
|
if (other.filename != null) |
||||||
|
return false; |
||||||
|
} else if (!filename.equals(other.filename)) |
||||||
|
return false; |
||||||
|
if (location == null) { |
||||||
|
if (other.location != null) |
||||||
|
return false; |
||||||
|
} else if (!location.equals(other.location)) |
||||||
|
return false; |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return "ContentEntity [id=" + id + ", filename=" + filename + ", location=" + location + "]"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package ru.molokoin.storage.services; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import jakarta.ejb.Local; |
||||||
|
import ru.molokoin.storage.entities.ContentEntity; |
||||||
|
/** |
||||||
|
* Интерфейс работы с хранилищем файлов на жестком диске |
||||||
|
*/ |
||||||
|
@Local |
||||||
|
public interface RepositoryFace { |
||||||
|
/** |
||||||
|
* Коллекция сведений о файлах, доступных в хранилице |
||||||
|
*/ |
||||||
|
List<ContentEntity> getInfo(); |
||||||
|
|
||||||
|
/** |
||||||
|
* Получение байткода из файловой системы по идентификатору файла |
||||||
|
*/ |
||||||
|
byte[] getContentById(); |
||||||
|
|
||||||
|
/** |
||||||
|
* Сохранение байткода в файловой системе |
||||||
|
*/ |
||||||
|
void save(String filename, byte[] content); |
||||||
|
|
||||||
|
/** |
||||||
|
* Удаление файла из файловой системы по id |
||||||
|
*/ |
||||||
|
void delete(Long id); |
||||||
|
} |
||||||
|
|
@ -0,0 +1,7 @@ |
|||||||
|
<!DOCTYPE web-app PUBLIC |
||||||
|
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" |
||||||
|
"http://java.sun.com/dtd/web-app_2_3.dtd" > |
||||||
|
|
||||||
|
<web-app> |
||||||
|
<display-name>Archetype Created Web Application</display-name> |
||||||
|
</web-app> |
@ -0,0 +1,5 @@ |
|||||||
|
<html> |
||||||
|
<body> |
||||||
|
<h2>Hello World!</h2> |
||||||
|
</body> |
||||||
|
</html> |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue