esoe 1 year ago
parent
commit
f41db319a1
  1. 2
      README.md
  2. 95
      pom.xml
  3. 17
      src/main/java/ru/molokoin/storage/api/RestConfig.java
  4. 36
      src/main/java/ru/molokoin/storage/api/RestStorageService.java
  5. 112
      src/main/java/ru/molokoin/storage/entities/ContentEntity.java
  6. 32
      src/main/java/ru/molokoin/storage/services/RepositoryFace.java
  7. 7
      src/main/webapp/WEB-INF/web.xml
  8. 5
      src/main/webapp/index.jsp
  9. BIN
      target/classes/ru/molokoin/storage/api/RestConfig.class
  10. BIN
      target/classes/ru/molokoin/storage/api/RestStorageService.class
  11. BIN
      target/classes/ru/molokoin/storage/entities/ContentEntity.class
  12. BIN
      target/classes/ru/molokoin/storage/services/RepositoryFace.class

2
README.md

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
# Storage-service
Сервис обмена файлами большого размера
API
## API
- getFile
- postFile
- deleteFile

95
pom.xml

@ -0,0 +1,95 @@ @@ -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>

17
src/main/java/ru/molokoin/storage/api/RestConfig.java

@ -0,0 +1,17 @@ @@ -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;
}
}

36
src/main/java/ru/molokoin/storage/api/RestStorageService.java

@ -0,0 +1,36 @@ @@ -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;
}
}

112
src/main/java/ru/molokoin/storage/entities/ContentEntity.java

@ -0,0 +1,112 @@ @@ -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 + "]";
}
}

32
src/main/java/ru/molokoin/storage/services/RepositoryFace.java

@ -0,0 +1,32 @@ @@ -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);
}

7
src/main/webapp/WEB-INF/web.xml

@ -0,0 +1,7 @@ @@ -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>

5
src/main/webapp/index.jsp

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

BIN
target/classes/ru/molokoin/storage/api/RestConfig.class

Binary file not shown.

BIN
target/classes/ru/molokoin/storage/api/RestStorageService.class

Binary file not shown.

BIN
target/classes/ru/molokoin/storage/entities/ContentEntity.class

Binary file not shown.

BIN
target/classes/ru/molokoin/storage/services/RepositoryFace.class

Binary file not shown.
Loading…
Cancel
Save