Skip to content

Commit 2cd56b4

Browse files
Merge pull request #9 from dynamiatools/7.x
7.3.0 upgrade to AWS SDK 2.28
2 parents ea86fbc + a373520 commit 2cd56b4

File tree

24 files changed

+560
-249
lines changed

24 files changed

+560
-249
lines changed

sources/core/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
<parent>
2323
<artifactId>tools.dynamia.modules.entityfiles.parent</artifactId>
2424
<groupId>tools.dynamia.modules</groupId>
25-
<version>7.1.2</version>
25+
<version>7.2.0</version>
2626
</parent>
2727
<name>Dynamia Modules - EntityFiles - Core</name>
2828
<artifactId>tools.dynamia.modules.entityfiles</artifactId>
29-
<version>7.1.2</version>
29+
<version>7.2.0</version>
3030
<url>https://www.dynamia.tools/modules/entityfiles</url>
3131

3232
<build>

sources/core/src/main/java/tools/dynamia/modules/entityfile/UploadedFileInfo.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ public void setContentType(String contentType) {
115115
this.contentType = contentType;
116116
}
117117

118+
public boolean hasInputStream() {
119+
return inputStream != null;
120+
}
121+
118122
public InputStream getInputStream() {
119123
if (inputStream == null) {
120124
try {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package tools.dynamia.modules.entityfile.controller;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import org.springframework.core.io.Resource;
5+
import org.springframework.http.HttpHeaders;
6+
import org.springframework.http.HttpStatus;
7+
import org.springframework.http.ResponseEntity;
8+
import org.springframework.web.bind.annotation.GetMapping;
9+
import org.springframework.web.bind.annotation.PathVariable;
10+
import org.springframework.web.bind.annotation.RequestParam;
11+
import tools.dynamia.integration.sterotypes.Controller;
12+
import tools.dynamia.modules.entityfile.local.LocalEntityFileStorageHandler;
13+
14+
@Controller
15+
public class LocalEntityFileStorageController {
16+
17+
private final LocalEntityFileStorageHandler handler;
18+
19+
public LocalEntityFileStorageController(LocalEntityFileStorageHandler handler) {
20+
this.handler = handler;
21+
}
22+
23+
@GetMapping(value = "/storage/{file}")
24+
public ResponseEntity<Resource> get(@PathVariable String file, @RequestParam("uuid") String uuid, HttpServletRequest request) {
25+
var resource = handler.getResource(file, uuid, request);
26+
if (resource != null && resource.exists() && resource.isReadable()) {
27+
return ResponseEntity.ok()
28+
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
29+
.body(resource);
30+
} else {
31+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
32+
}
33+
}
34+
}

sources/core/src/main/java/tools/dynamia/modules/entityfile/domain/EntityFile.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
import jakarta.persistence.*;
3434
import jakarta.validation.constraints.NotNull;
35+
3536
import java.util.List;
3637

3738
@Entity

sources/core/src/main/java/tools/dynamia/modules/entityfile/local/LocalEntityFileStorage.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
package tools.dynamia.modules.entityfile.local;
1919

2020
import org.springframework.core.env.Environment;
21+
import tools.dynamia.commons.logger.LoggingService;
22+
import tools.dynamia.commons.logger.SLF4JLoggingService;
2123
import tools.dynamia.domain.ValidationError;
2224
import tools.dynamia.domain.query.Parameters;
2325
import tools.dynamia.domain.services.CrudService;
@@ -37,6 +39,8 @@
3739
@Service
3840
public class LocalEntityFileStorage implements EntityFileStorage {
3941

42+
private final LoggingService logger = new SLF4JLoggingService(LocalEntityFileStorage.class, "Local: ");
43+
4044
public static final String ID = "LocalStorage";
4145
private static final String LOCAL_FILES_LOCATION = "LOCAL_FILES_LOCATION";
4246
private static final String LOCAL_USE_HTTPS = "LOCAL_USE_HTTPS";
@@ -71,9 +75,12 @@ public void upload(EntityFile entityFile, UploadedFileInfo fileInfo) {
7175
File realFile = getRealFile(entityFile);
7276

7377
try {
78+
7479
IOUtils.copy(fileInfo.getInputStream(), realFile);
7580
entityFile.setSize(realFile.length());
81+
logger.info("Uploaded to server: " + realFile);
7682
} catch (IOException e) {
83+
logger.error("Error upload local file " + realFile, e);
7784
throw new EntityFileException("Error upload local file " + realFile, e);
7885
}
7986

sources/core/src/main/java/tools/dynamia/modules/entityfile/local/LocalEntityFileStorageConfig.java

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,16 @@
1717

1818
package tools.dynamia.modules.entityfile.local;
1919

20-
import java.util.HashMap;
21-
import java.util.Map;
22-
2320
import org.springframework.context.annotation.Bean;
2421
import org.springframework.context.annotation.Configuration;
25-
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
26-
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
22+
import tools.dynamia.modules.entityfile.service.EntityFileService;
2723

2824
@Configuration
2925
class LocalEntityFileStorageConfig {
3026

31-
@Bean
32-
public SimpleUrlHandlerMapping localHandler() {
33-
34-
ResourceHttpRequestHandler handler = localEntityFileStorageHandler();
35-
36-
Map<String, Object> map = new HashMap<>();
37-
38-
map.put("storage/**", handler);
39-
40-
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
41-
mapping.setUrlMap(map);
42-
43-
return mapping;
44-
}
4527

46-
@Bean
47-
public LocalEntityFileStorageHandler localEntityFileStorageHandler() {
48-
return new LocalEntityFileStorageHandler();
49-
}
28+
@Bean
29+
public LocalEntityFileStorageHandler localEntityFileStorageHandler(LocalEntityFileStorage storage, EntityFileService service) {
30+
return new LocalEntityFileStorageHandler(storage, service);
31+
}
5032
}

sources/core/src/main/java/tools/dynamia/modules/entityfile/local/LocalEntityFileStorageHandler.java

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
import org.springframework.core.io.FileSystemResource;
2525
import org.springframework.core.io.Resource;
26-
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
2726

2827
import tools.dynamia.commons.StringUtils;
2928
import tools.dynamia.integration.Containers;
@@ -36,21 +35,21 @@
3635
import tools.dynamia.modules.entityfile.enums.EntityFileType;
3736
import tools.dynamia.modules.entityfile.service.EntityFileService;
3837

39-
public class LocalEntityFileStorageHandler extends ResourceHttpRequestHandler {
38+
public class LocalEntityFileStorageHandler {
4039

4140
private static final String UUID = "/uuid/";
42-
private LocalEntityFileStorage storage;
43-
private EntityFileService service;
41+
private final LocalEntityFileStorage storage;
42+
private final EntityFileService service;
4443
private EntityFileAccountProvider accountProvider;
4544

46-
@Override
47-
protected Resource getResource(HttpServletRequest request) {
48-
if (service == null) {
49-
service = Containers.get().findObject(EntityFileService.class);
50-
}
51-
if (storage == null) {
52-
storage = Containers.get().findObject(LocalEntityFileStorage.class);
53-
}
45+
public LocalEntityFileStorageHandler(LocalEntityFileStorage storage, EntityFileService service) {
46+
this.storage = storage;
47+
this.service = service;
48+
}
49+
50+
51+
public Resource getResource(String fileName, String uuid, HttpServletRequest request) {
52+
5453

5554
if (accountProvider == null) {
5655
accountProvider = Containers.get().findObject(EntityFileAccountProvider.class);
@@ -60,23 +59,11 @@ protected Resource getResource(HttpServletRequest request) {
6059
}
6160

6261
File file = null;
63-
String uuid = getParam(request, "uuid", null);
64-
65-
if (uuid == null) {
66-
String path = request.getPathInfo();
67-
if (path.contains(UUID)) {
68-
uuid = path.substring(path.lastIndexOf(UUID) + UUID.length());
69-
uuid = StringUtils.removeFilenameExtension(uuid);
70-
}
71-
}
72-
73-
if (uuid == null) {
74-
return null;
75-
}
76-
7762
Long currentAccountId = accountProvider.getAccountId();
7863
EntityFile entityFile = service.getEntityFile(uuid);
7964

65+
66+
8067
if (entityFile != null && (currentAccountId == null || currentAccountId.equals(0L) || entityFile.isShared() || entityFile.getAccountId().equals(currentAccountId))) {
8168

8269
StoredEntityFile storedEntityFile = storage.download(entityFile);

sources/core/src/main/java/tools/dynamia/modules/entityfile/service/impl/EntityFileServiceImpl.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
package tools.dynamia.modules.entityfile.service.impl;
2020

21+
import jakarta.persistence.criteria.CriteriaBuilder;
22+
import jakarta.persistence.criteria.CriteriaQuery;
23+
import jakarta.persistence.criteria.Root;
2124
import org.springframework.beans.factory.annotation.Autowired;
2225
import org.springframework.stereotype.Service;
2326
import org.springframework.transaction.annotation.Transactional;
@@ -101,7 +104,7 @@ private EntityFile createDir(EntityFile parent, Object targetEntity, String name
101104
@Override
102105
@Transactional
103106
public EntityFile createEntityFile(UploadedFileInfo fileInfo, Object target, String description) {
104-
logger.info("Creating new entity file for " + target + ", file: " + fileInfo.getFullName());
107+
logger.info("Creating new entity file for " + (target != null ? target : "temporal entity") + ", file: " + fileInfo.getFullName());
105108
EntityFile entityFile = new EntityFile();
106109
entityFile.setDescription(description);
107110
entityFile.setContentType(fileInfo.getContentType());
@@ -294,8 +297,11 @@ public void download(EntityFile entityFile, File outputFile) {
294297
@Override
295298
public EntityFile getEntityFile(String uuid) {
296299
try {
297-
return crudService.findSingle(EntityFile.class, QueryParameters.with("uuid", QueryConditions.eq(uuid))
298-
.add("accountId", QueryConditions.isNotNull()));
300+
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
301+
CriteriaQuery<EntityFile> query = cb.createQuery(EntityFile.class);
302+
Root<EntityFile> root = query.from(EntityFile.class);
303+
query.select(root).where(cb.equal(root.get("uuid"), uuid));
304+
return entityManager.createQuery(query).setMaxResults(1).getSingleResult();
299305
} catch (Exception e) {
300306
logger.error("Error loading entity file with uuid: " + uuid + ". " + e.getMessage(), e);
301307

sources/pom.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<groupId>tools.dynamia.modules</groupId>
2323
<artifactId>tools.dynamia.modules.entityfiles.parent</artifactId>
2424
<packaging>pom</packaging>
25-
<version>7.1.2</version>
25+
<version>7.2.0</version>
2626
<name>Dynamia Modules - EntityFiles</name>
2727
<url>https://dynamia.tools/modules/entityfiles</url>
2828
<description>DynamiaTools extension to attach files to entities</description>
@@ -63,9 +63,9 @@
6363

6464
<properties>
6565
<file.encoding>UTF-8</file.encoding>
66-
<dynamiatools.version>5.2.0</dynamiatools.version>
66+
<dynamiatools.version>5.2.1</dynamiatools.version>
6767
<springboot.version>3.3.3</springboot.version>
68-
<aws.version>1.12.771</aws.version>
68+
<aws.version>2.28.11</aws.version>
6969
<java.version>17</java.version>
7070
<maven.compiler>3.13.0</maven.compiler>
7171
<source.encoding>UTF-8</source.encoding>
@@ -88,7 +88,7 @@
8888
<plugin>
8989
<groupId>org.sonatype.plugins</groupId>
9090
<artifactId>nexus-staging-maven-plugin</artifactId>
91-
<version>1.6.13</version>
91+
<version>1.7.0</version>
9292
<extensions>true</extensions>
9393
<configuration>
9494
<serverId>ossrh</serverId>
@@ -99,7 +99,7 @@
9999
<plugin>
100100
<groupId>org.apache.maven.plugins</groupId>
101101
<artifactId>maven-javadoc-plugin</artifactId>
102-
<version>3.5.0</version>
102+
<version>3.10.0</version>
103103
<configuration>
104104
<failOnError>false</failOnError>
105105
<doclint>none</doclint>
@@ -108,7 +108,7 @@
108108
<plugin>
109109
<groupId>org.apache.maven.plugins</groupId>
110110
<artifactId>maven-source-plugin</artifactId>
111-
<version>3.3.0</version>
111+
<version>3.3.1</version>
112112
</plugin>
113113
</plugins>
114114
</build>
@@ -122,7 +122,7 @@
122122
<dependency>
123123
<groupId>commons-io</groupId>
124124
<artifactId>commons-io</artifactId>
125-
<version>2.15.1</version>
125+
<version>2.16.1</version>
126126
</dependency>
127127

128128
<dependency>
@@ -175,7 +175,7 @@
175175
<plugin>
176176
<groupId>org.apache.maven.plugins</groupId>
177177
<artifactId>maven-gpg-plugin</artifactId>
178-
<version>3.0.1</version>
178+
<version>3.1.0</version>
179179
<executions>
180180
<execution>
181181
<id>sign-artifacts</id>

sources/s3/pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@
2323
<parent>
2424
<groupId>tools.dynamia.modules</groupId>
2525
<artifactId>tools.dynamia.modules.entityfiles.parent</artifactId>
26-
<version>7.1.2</version>
26+
<version>7.2.0</version>
2727
</parent>
2828

2929
<name>Dynamia Modules - EntityFiles - S3</name>
3030
<artifactId>tools.dynamia.modules.entityfiles.s3</artifactId>
31-
<version>7.1.2</version>
31+
<version>7.2.0</version>
3232
<url>https://www.dynamia.tools/modules/entityfiles</url>
3333

3434
<build>
@@ -53,8 +53,8 @@
5353
<version>${project.parent.version}</version>
5454
</dependency>
5555
<dependency>
56-
<groupId>com.amazonaws</groupId>
57-
<artifactId>aws-java-sdk-s3</artifactId>
56+
<groupId>software.amazon.awssdk</groupId>
57+
<artifactId>s3</artifactId>
5858
<version>${aws.version}</version>
5959
</dependency>
6060

0 commit comments

Comments
 (0)