Skip to content

Commit

Permalink
Merge pull request #7 from jottinger/main
Browse files Browse the repository at this point in the history
There are lots of internal changes to Filelizer.
  • Loading branch information
jansoren committed May 10, 2024
2 parents 2a0c1bb + bdba9ea commit 82fc0cb
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 55 deletions.
65 changes: 20 additions & 45 deletions src/main/java/io/github/filelize/Filelizer.java
Expand Up @@ -23,7 +23,7 @@ public class Filelizer implements IFilelizer {

public Filelizer(String basePath) {
var objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.findAndRegisterModules();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
this.filelizerObject = new FilelizerObject(basePath, objectMapper);
this.filelizerSingle = new FilelizerSingle(basePath, objectMapper);
Expand All @@ -32,78 +32,53 @@ public Filelizer(String basePath) {
}

public Filelizer(String basePath, ObjectMapper objectMapper, FilelizeType defaultFilelizeType) {
objectMapper.registerModule(new JavaTimeModule());
objectMapper.findAndRegisterModules();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
this.filelizerObject = new FilelizerObject(basePath, objectMapper);
this.filelizerSingle = new FilelizerSingle(basePath, objectMapper);
this.filelizerMultiple = new FilelizerMultiple(basePath, objectMapper);
this.defaultFilelizeType = defaultFilelizeType;
}

private IFilelizer resolveFilelizerType(Object valueType) {
return resolveFilelizerType(getFilelizeType(valueType, defaultFilelizeType));
}

private IFilelizer resolveFilelizerType(FilelizeType filelizeType) {
return switch(filelizeType) {
case MULTIPLE_FILES -> filelizerMultiple;
case SINGLE_FILE -> filelizerSingle;
case OBJECT_FILE -> filelizerObject;
};
}

@Override
public <T> T find(String id, Class<T> valueType) {
var filelizeType = getFilelizeType(valueType, defaultFilelizeType);
if(filelizeType == FilelizeType.SINGLE_FILE) {
return filelizerSingle.find(id, valueType);
} else if(filelizeType == FilelizeType.MULTIPLE_FILES) {
return filelizerMultiple.find(id, valueType);
}
return filelizerObject.find(id, valueType);
return resolveFilelizerType(valueType).find(id, valueType);
}

@Override
public <T> Map<String, T> findAll(Class<T> valueType) {
var filelizeType = getFilelizeType(valueType, defaultFilelizeType);
if(filelizeType == FilelizeType.SINGLE_FILE) {
return filelizerSingle.findAll(valueType);
} else if(filelizeType == FilelizeType.MULTIPLE_FILES) {
return filelizerMultiple.findAll(valueType);
}
return filelizerObject.findAll(valueType);
return resolveFilelizerType(valueType).findAll(valueType);
}

@Override
public <T> String save(T object) {
var filelizeType = getFilelizeType(object, defaultFilelizeType);
if(filelizeType == FilelizeType.SINGLE_FILE) {
return filelizerSingle.save(object);
} else if(filelizeType == FilelizeType.MULTIPLE_FILES) {
return filelizerMultiple.save(object);
}
return filelizerObject.save(object);
return resolveFilelizerType(object).save(object);
}

@Override
public <T> String save(String id, T object) {
var filelizeType = getFilelizeType(object, defaultFilelizeType);
if(filelizeType == FilelizeType.SINGLE_FILE) {
return filelizerSingle.save(id, object);
} else if(filelizeType == FilelizeType.MULTIPLE_FILES) {
return filelizerMultiple.save(id, object);
}
return filelizerObject.save(id, object);
return resolveFilelizerType(object).save(id, object);
}

@Override
public <T> List<String> saveAll(List<T> objects) {
var filelizeType = getFilelizeTypeOfList(objects, defaultFilelizeType);
if(filelizeType == FilelizeType.SINGLE_FILE) {
return filelizerSingle.saveAll(objects);
} else if(filelizeType == FilelizeType.MULTIPLE_FILES) {
return filelizerMultiple.saveAll(objects);
}
return filelizerObject.saveAll(objects);
return resolveFilelizerType(getFilelizeTypeOfList(objects, defaultFilelizeType)).saveAll(objects);
}

@Override
public <T> void delete(String id, Class<T> valueType) {
var filelizeType = getFilelizeType(valueType, defaultFilelizeType);
if(filelizeType == FilelizeType.SINGLE_FILE) {
filelizerSingle.delete(id, valueType);
} else if(filelizeType == FilelizeType.MULTIPLE_FILES) {
filelizerMultiple.delete(id, valueType);
} else {
filelizerObject.delete(id, valueType);
}
resolveFilelizerType(valueType).delete(id, valueType);
}
}
4 changes: 2 additions & 2 deletions src/main/java/io/github/filelize/FilelizerObject.java
Expand Up @@ -29,7 +29,7 @@ public <T> T find(String id, Class<T> valueType) {
try {
return fileHandler.readFile(fullPath, valueType);
} catch (IOException e) {
log.error("Error occurred when trying to get " + fullPath, e);
log.error(String.format("Error occurred when trying to get %s", fullPath), e);
return null;
}
}
Expand Down Expand Up @@ -71,7 +71,7 @@ public <T> void delete(String id, Class<T> valueType) {
try {
fileHandler.delete(fullPath);
} catch (IOException e) {
log.error("Error occurred when trying to delete " + fullPath, e);
log.error(String.format("Error occurred when trying to delete %s", fullPath), e);
}
}
}
8 changes: 4 additions & 4 deletions src/main/java/io/github/filelize/path/PathHandler.java
Expand Up @@ -7,6 +7,7 @@

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

import static io.github.filelize.FilelizeUtil.*;

Expand All @@ -31,6 +32,7 @@ public String getFullPath2(String id, Object object) {
return getDirectoryPath(object) + "/" + id + ".json";
}

// TODO should use the abstraction from Filelizer to dispatch: object graph issue
public <T> String getFullPath(String id, Class<T> valueType) {
if(filelizeType == FilelizeType.MULTIPLE_FILES) {
var name = getFilelizeName(valueType);
Expand Down Expand Up @@ -75,10 +77,8 @@ private String getFilename(String id, String name) {
return name + "_" + id + ".json";
}
private String getDirectoryPath(Object object){
if(object != null) {
return basePath + "/" + getFilelizeDirectory(object);
}
return basePath;
Objects.requireNonNull(object);
return basePath + "/" + getFilelizeDirectory(object);
}

}
11 changes: 8 additions & 3 deletions src/test/java/io/github/filelize/file/FileHandlerTest.java
Expand Up @@ -7,6 +7,7 @@
import java.io.IOException;

import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.fail;

public class FileHandlerTest {

Expand All @@ -17,9 +18,13 @@ public FileHandlerTest() {
}

@Test
public void testReadFile_ShouldHandleNoSuchFileException() throws IOException {
var something = fileHandler.readFile("tmp/not_existing_folder.json", SomethingElse.class);
assertNull(something);
public void testReadFile_ShouldHandleNoSuchFileException() {
try {
var something = fileHandler.readFile("tmp/not_existing_folder.json", SomethingElse.class);
assertNull(something);
} catch(IOException e) {
fail(e);
}
}

}
Expand Up @@ -9,6 +9,7 @@
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

public class PathHandlerSingleTest {

Expand All @@ -17,7 +18,14 @@ public class PathHandlerSingleTest {
public PathHandlerSingleTest() {
this.pathHandler = new PathHandler("src/test/resources", FilelizeType.SINGLE_FILE, new ObjectMapper());
}

@Test
public void testPathHandlerReturnsEmptyBaseForNull() {
// TODO clarify API visibility
assertThrows(NullPointerException.class, () -> {
var path = pathHandler.getFullPath2("foo", null);
assertEquals("src/test/resources/foo.json", path);
});
}
@Test
public void testGetFullPath() {
var fullPath = pathHandler.getFullPath(new SomethingSingle());
Expand Down

0 comments on commit 82fc0cb

Please sign in to comment.