Skip to content

Commit a34d561

Browse files
refactor: rename RemoteEntityFileStorage to BuckieEntityFileStorage and update related methods
1 parent 9173db5 commit a34d561

6 files changed

Lines changed: 57 additions & 88 deletions

File tree

extensions/entity-files/sources/core/src/main/java/tools/dynamia/modules/entityfile/EntityFileAccountProvider.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,30 @@
1818

1919
package tools.dynamia.modules.entityfile;
2020

21+
import tools.dynamia.modules.entityfile.domain.EntityFile;
22+
2123
/**
2224
*
2325
* @author Mario Serrano Leones
2426
*/
2527
public interface EntityFileAccountProvider {
2628

29+
/**
30+
* Return current account Id for tenant
31+
*
32+
* @return account id
33+
*/
2734
Long getAccountId();
2835

36+
37+
/**
38+
* Check is the account id is valid, by default just validate if account id not null
39+
*
40+
* @param entityFile
41+
* @return valid
42+
*/
43+
default boolean isValidEntityFile(EntityFile entityFile) {
44+
return entityFile != null && entityFile.getAccountId() != null && entityFile.getAccountId() > 0;
45+
}
46+
2947
}

extensions/entity-files/sources/core/src/main/java/tools/dynamia/modules/entityfile/controller/EntityFileStorageController.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public ResponseEntity<Map<String, Object>> export(@PathVariable String uuid, Htt
7474
return ResponseEntity.notFound().build();
7575
}
7676

77-
if (!isSameAccount(entityFile)) {
77+
if (!isValidAccount(entityFile)) {
7878
return ResponseEntity.notFound().build();
7979
}
8080

@@ -209,7 +209,7 @@ public ResponseEntity<Resource> get(@PathVariable("uuid") String uuid, @PathVari
209209
return ResponseEntity.notFound().build();
210210
}
211211

212-
if (!isSameAccount(entityFile)) {
212+
if (!isValidAccount(entityFile)) {
213213
return ResponseEntity.notFound().build();
214214
}
215215

@@ -320,7 +320,7 @@ private EntityFile resolveParent(String parentUuid) {
320320
}
321321

322322
EntityFile parent = entityFileService.getEntityFile(parentUuid.trim());
323-
if (parent == null || !isSameAccount(parent)) {
323+
if (parent == null || !isValidAccount(parent)) {
324324
throw new UploadRequestException(HttpStatus.NOT_FOUND, "Parent entity file not found: " + parentUuid);
325325
}
326326
return parent;
@@ -565,12 +565,10 @@ private boolean isNumeric(String value) {
565565
* @param entityFile file to evaluate
566566
* @return {@code true} when the file can be accessed from the current account context
567567
*/
568-
private boolean isSameAccount(EntityFile entityFile) {
568+
private boolean isValidAccount(EntityFile entityFile) {
569569
EntityFileAccountProvider accountProvider = Containers.get().findObject(EntityFileAccountProvider.class);
570-
if (accountProvider != null) {
571-
if (entityFile.getAccountId() != null) {
572-
return entityFile.getAccountId().equals(accountProvider.getAccountId());
573-
}
570+
if (accountProvider != null && entityFile != null) {
571+
return accountProvider.isValidEntityFile(entityFile);
574572
}
575573
return true;
576574
}

extensions/entity-files/sources/core/src/main/java/tools/dynamia/modules/entityfile/remote/RemoteEntityFileStorage.java renamed to extensions/entity-files/sources/core/src/main/java/tools/dynamia/modules/entityfile/remote/BuckieEntityFileStorage.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@
5959
* @author Dynamia Soluciones IT
6060
*/
6161
@Service
62-
public class RemoteEntityFileStorage implements EntityFileStorage {
62+
public class BuckieEntityFileStorage implements EntityFileStorage {
6363

64-
private final LoggingService logger = new SLF4JLoggingService(RemoteEntityFileStorage.class, "SFS: ");
64+
private final LoggingService logger = new SLF4JLoggingService(BuckieEntityFileStorage.class, "Buckie: ");
6565

66-
public static final String ID = "RemoteSimpleFileStorage";
66+
public static final String ID = "buckie";
6767

6868
// ── Parameter names ──────────────────────────────────────────────────────
6969
public static final String SFS_URL = "SFS_URL";
@@ -85,7 +85,7 @@ public class RemoteEntityFileStorage implements EntityFileStorage {
8585
*/
8686
private volatile RestClient restClient;
8787

88-
public RemoteEntityFileStorage(LocalEntityFileStorage localEntityFileStorage, Parameters appParams, CrudService crudService, Environment environment) {
88+
public BuckieEntityFileStorage(LocalEntityFileStorage localEntityFileStorage, Parameters appParams, CrudService crudService, Environment environment) {
8989
this.localEntityFileStorage = localEntityFileStorage;
9090
this.appParams = appParams;
9191
this.crudService = crudService;
@@ -101,7 +101,7 @@ public String getId() {
101101

102102
@Override
103103
public String getName() {
104-
return "Remote Simple File Storage";
104+
return "Buckie Remote File Storage";
105105
}
106106

107107
@Override
@@ -153,15 +153,15 @@ public StoredEntityFile download(EntityFile entityFile) {
153153
String remoteUrl = buildRemoteUrl(entityFile);
154154
String publicUrl = localEntityFileStorage.generateURL(entityFile);
155155

156-
return new RemoteStoredEntityFile(entityFile, remoteUrl, publicUrl, client(), getIdentity(), getSecret());
156+
return new BuckieStoredEntityFile(entityFile, remoteUrl, publicUrl, client(), getIdentity(), getSecret());
157157
}
158158

159159
@Override
160160
public void delete(EntityFile entityFile) {
161161
String key = buildKey(entityFile);
162162
String bucket = getBucket();
163163

164-
logger.info("Deleting from SFS: " + key);
164+
logger.info("Deleting: " + key);
165165

166166
try {
167167
client().delete()
@@ -297,12 +297,12 @@ private static String contentType(UploadedFileInfo fileInfo) {
297297
* SFS credentials are included in every download request so the server can
298298
* authorise the caller.
299299
*/
300-
public static class RemoteStoredEntityFile extends StoredEntityFile {
300+
public static class BuckieStoredEntityFile extends StoredEntityFile {
301301

302302
@Serial
303303
private static final long serialVersionUID = 1L;
304304

305-
private final LoggingService logger = LoggingService.get(RemoteStoredEntityFile.class, "SFS: ");
305+
private final LoggingService logger = LoggingService.get(BuckieStoredEntityFile.class, "SFS: ");
306306

307307

308308
private final transient RestClient restClient;
@@ -311,7 +311,7 @@ public static class RemoteStoredEntityFile extends StoredEntityFile {
311311
private final String remoteUrl;
312312

313313

314-
public RemoteStoredEntityFile(EntityFile entityFile, String remoteUrl, String publicUrl,
314+
public BuckieStoredEntityFile(EntityFile entityFile, String remoteUrl, String publicUrl,
315315
RestClient restClient, String identity, String secret) {
316316
super(entityFile, publicUrl, null);
317317
this.remoteUrl = remoteUrl;

extensions/entity-files/sources/core/src/test/java/tools/dynamia/modules/entityfile/remote/RemoteEntityFileStorageTest.java renamed to extensions/entity-files/sources/core/src/test/java/tools/dynamia/modules/entityfile/remote/BuckieEntityFileStorageTest.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
import static org.junit.Assert.*;
4444

4545
/**
46-
* Integration tests for {@link RemoteEntityFileStorage}.
46+
* Integration tests for {@link BuckieEntityFileStorage}.
4747
*
4848
* <p>Pure-logic tests (buildKey, getFileName, etc.) always run.
4949
* HTTP tests are skipped automatically via {@code Assume.assumeTrue}
@@ -59,45 +59,45 @@
5959
* Maven example: {@code mvn test -DSFS_URL=http://my-sfs:8081 -DSFS_BUCKET=test}
6060
* </p>
6161
*/
62-
public class RemoteEntityFileStorageTest {
62+
public class BuckieEntityFileStorageTest {
6363

6464
private static String sfsUrl;
6565
private static String sfsBucket;
6666
private static String sfsIdentity;
6767
private static String sfsSecret;
6868

69-
private RemoteEntityFileStorage storage;
69+
private BuckieEntityFileStorage storage;
7070

7171
// ── Setup ─────────────────────────────────────────────────────────────────
7272

7373
@BeforeClass
7474
public static void readConfiguration() {
75-
sfsUrl = systemOrEnv(RemoteEntityFileStorage.SFS_URL, "http://localhost:8500");
76-
sfsBucket = systemOrEnv(RemoteEntityFileStorage.SFS_BUCKET, "test");
77-
sfsIdentity = systemOrEnv(RemoteEntityFileStorage.SFS_IDENTITY, "test");
78-
sfsSecret = systemOrEnv(RemoteEntityFileStorage.SFS_SECRET, "test");
75+
sfsUrl = systemOrEnv(BuckieEntityFileStorage.SFS_URL, "http://localhost:8500");
76+
sfsBucket = systemOrEnv(BuckieEntityFileStorage.SFS_BUCKET, "test");
77+
sfsIdentity = systemOrEnv(BuckieEntityFileStorage.SFS_IDENTITY, "test");
78+
sfsSecret = systemOrEnv(BuckieEntityFileStorage.SFS_SECRET, "test");
7979

8080
System.out.println("[SFS Test] URL=" + sfsUrl + " | BUCKET=" + sfsBucket);
8181
}
8282

8383
@Before
8484
public void setUp() {
8585
MockEnvironment env = new MockEnvironment();
86-
env.setProperty(RemoteEntityFileStorage.SFS_URL, sfsUrl);
87-
env.setProperty(RemoteEntityFileStorage.SFS_BUCKET, sfsBucket);
88-
env.setProperty(RemoteEntityFileStorage.SFS_IDENTITY, sfsIdentity);
89-
env.setProperty(RemoteEntityFileStorage.SFS_SECRET, sfsSecret);
86+
env.setProperty(BuckieEntityFileStorage.SFS_URL, sfsUrl);
87+
env.setProperty(BuckieEntityFileStorage.SFS_BUCKET, sfsBucket);
88+
env.setProperty(BuckieEntityFileStorage.SFS_IDENTITY, sfsIdentity);
89+
env.setProperty(BuckieEntityFileStorage.SFS_SECRET, sfsSecret);
9090

9191
var local = new LocalEntityFileStorage(noOpParameters(), new InMemoryCrudService(), env);
9292

93-
storage = new RemoteEntityFileStorage(local, noOpParameters(), new InMemoryCrudService(), env);
93+
storage = new BuckieEntityFileStorage(local, noOpParameters(), new InMemoryCrudService(), env);
9494
}
9595

9696
// ── Pure-logic tests (no server required) ─────────────────────────────────
9797

9898
@Test
9999
public void testGetId() {
100-
assertEquals(RemoteEntityFileStorage.ID, storage.getId());
100+
assertEquals(BuckieEntityFileStorage.ID, storage.getId());
101101
}
102102

103103
@Test
@@ -127,7 +127,7 @@ public void testBuildKey_withSubfolder() {
127127
@Test
128128
public void testGetFileName_withSpacesAndDashes() {
129129
EntityFile ef = buildEntityFile("My File-Final.pdf", null, 1L);
130-
String name = RemoteEntityFileStorage.getFileName(ef);
130+
String name = BuckieEntityFileStorage.getFileName(ef);
131131

132132
assertFalse("File name must not contain spaces", name.contains(" "));
133133
assertFalse("File name base must not contain dashes",
@@ -137,7 +137,7 @@ public void testGetFileName_withSpacesAndDashes() {
137137
@Test
138138
public void testGetFileName_withAccentsAndSpecialChars() {
139139
EntityFile ef = buildEntityFile("Ñoño Ávido Murió.pdf", null, 1L);
140-
String name = RemoteEntityFileStorage.getFileName(ef);
140+
String name = BuckieEntityFileStorage.getFileName(ef);
141141

142142
assertFalse("File name must not contain ñ", name.contains("ñ"));
143143
assertFalse("File name must not contain á", name.contains("á"));
@@ -150,25 +150,25 @@ public void testGetFileName_usesStoredFileNameWhenSet() {
150150
EntityFile ef = buildEntityFile("original.pdf", null, 1L);
151151
ef.setStoredFileName("custom_stored_name.pdf");
152152

153-
String name = RemoteEntityFileStorage.getFileName(ef);
153+
String name = BuckieEntityFileStorage.getFileName(ef);
154154

155155
assertEquals("Must use storedFileName when it is set", "custom_stored_name.pdf", name);
156156
}
157157

158158
@Test
159159
public void testGetFileName_withoutSubfolder() {
160160
EntityFile ef = buildEntityFile("doc.txt", null, 1L);
161-
String name = RemoteEntityFileStorage.getFileName(ef);
161+
String name = BuckieEntityFileStorage.getFileName(ef);
162162

163163
assertFalse("Without subfolder the name must not start with /", name.startsWith("/"));
164164
assertTrue("Name must contain the uuid", name.contains(ef.getUuid()));
165165
}
166166

167167
@Test
168168
public void testGetAccountFolderName() {
169-
assertEquals("account42/", RemoteEntityFileStorage.getAccountFolderName(42L));
170-
assertEquals("account1/", RemoteEntityFileStorage.getAccountFolderName(1L));
171-
assertEquals("account999/", RemoteEntityFileStorage.getAccountFolderName(999L));
169+
assertEquals("account42/", BuckieEntityFileStorage.getAccountFolderName(42L));
170+
assertEquals("account1/", BuckieEntityFileStorage.getAccountFolderName(1L));
171+
assertEquals("account999/", BuckieEntityFileStorage.getAccountFolderName(999L));
172172
}
173173

174174
@Test
@@ -336,7 +336,7 @@ public void testUploadAndDownloadUrl_areConsistent() {
336336
storage.upload(ef, info);
337337

338338
StoredEntityFile stored = storage.download(ef);
339-
String url = stored instanceof RemoteEntityFileStorage.RemoteStoredEntityFile r ? r.getRemoteUrl() : stored.getUrl();
339+
String url = stored instanceof BuckieEntityFileStorage.BuckieStoredEntityFile r ? r.getRemoteUrl() : stored.getUrl();
340340

341341
// The URL returned by download() must point to the same resource that was uploaded
342342
assertNotNull(url);

extensions/entity-files/sources/s3/src/main/java/tools/dynamia/modules/entityfiles/s3/S3EntityFileStorage.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,8 @@
4545
import tools.dynamia.modules.entityfile.UploadedFileInfo;
4646
import tools.dynamia.modules.entityfile.domain.EntityFile;
4747
import tools.dynamia.modules.entityfile.enums.EntityFileType;
48-
import tools.dynamia.modules.entityfile.remote.RemoteEntityFileStorage;
4948

5049
import java.io.File;
51-
import java.net.URL;
5250
import java.net.URLConnection;
5351
import java.nio.file.Files;
5452
import java.nio.file.Path;
@@ -58,8 +56,8 @@
5856
import java.util.concurrent.ExecutorService;
5957
import java.util.concurrent.Executors;
6058

61-
import static tools.dynamia.modules.entityfile.remote.RemoteEntityFileStorage.getAccountFolderName;
62-
import static tools.dynamia.modules.entityfile.remote.RemoteEntityFileStorage.getFileName;
59+
import static tools.dynamia.modules.entityfile.remote.BuckieEntityFileStorage.getAccountFolderName;
60+
import static tools.dynamia.modules.entityfile.remote.BuckieEntityFileStorage.getFileName;
6361

6462
/**
6563
* {@link EntityFileStorage} implementation that store files in Amazon S3 service.

extensions/saas/sources/core/src/main/java/tools/dynamia/modules/saas/AccountEntityFileProvider.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

0 commit comments

Comments
 (0)