Skip to content

Commit 77c4279

Browse files
committed
refactor: update withAutomaticProvenance method to accept ProvenanceManager instance
This allows disabling provenance management with null, but also enable to implement derived or completely new implementations.
1 parent 6cbbbc8 commit 77c4279

File tree

12 files changed

+41
-36
lines changed

12 files changed

+41
-36
lines changed

src/main/java/edu/kit/datamanager/ro_crate/preview/CratePreview.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ default void generate(Crate crate, File targetDir) throws IOException {
4141
// (including preview)
4242
new CrateWriter<>(new WriteFolderStrategy().disablePreview())
4343
// We assume the caller (e.g. a writer) already stored the provenance.
44-
.withAutomaticProvenance(false)
44+
.withAutomaticProvenance(null)
4545
.save(crate, targetDir.getAbsolutePath());
4646
this.saveAllToFolder(targetDir);
4747
try (var stream = Files.list(targetDir.toPath())) {

src/main/java/edu/kit/datamanager/ro_crate/writer/CrateWriter.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,21 @@
1515
public class CrateWriter<DESTINATION_TYPE> {
1616

1717
private final GenericWriterStrategy<DESTINATION_TYPE> strategy;
18-
protected boolean automaticProvenance = true;
18+
protected ProvenanceManager provenanceManager = new ProvenanceManager();
1919

2020
public CrateWriter(GenericWriterStrategy<DESTINATION_TYPE> strategy) {
2121
this.strategy = strategy;
2222
}
2323

24-
public CrateWriter<DESTINATION_TYPE> withAutomaticProvenance(boolean automaticProvenance) {
25-
this.automaticProvenance = automaticProvenance;
24+
/**
25+
* Sets the ProvenanceManager to be used for automatic provenance information
26+
* generation when saving the crate.
27+
*
28+
* @param provenanceManager the ProvenanceManager to use. Using null will disable provenance management.
29+
* @return this CrateWriter instance for method chaining.
30+
*/
31+
public CrateWriter<DESTINATION_TYPE> withAutomaticProvenance(ProvenanceManager provenanceManager) {
32+
this.provenanceManager = provenanceManager;
2633
return this;
2734
}
2835

@@ -35,7 +42,7 @@ public CrateWriter<DESTINATION_TYPE> withAutomaticProvenance(boolean automaticPr
3542
public void save(Crate crate, DESTINATION_TYPE destination) throws IOException {
3643
Validator defaultValidation = new Validator(new JsonSchemaValidation());
3744
defaultValidation.validate(crate);
38-
if (automaticProvenance) {
45+
if (this.provenanceManager != null) {
3946
new ProvenanceManager().addProvenanceInformation(crate);
4047
}
4148
this.strategy.save(crate, destination);

src/main/java/edu/kit/datamanager/ro_crate/writer/ProvenanceManager.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* Manages provenance information for RO-Crates.
1414
* Handles the creation and updating of ro-crate-java entity and its actions.
1515
*/
16-
class ProvenanceManager {
16+
public class ProvenanceManager {
1717
protected record IdPrefix(String prefix) {
1818
public String withSuffix(String suffix) {
1919
return prefix + "-" + suffix;
@@ -49,7 +49,7 @@ public String getLibraryId() {
4949
return RO_CRATE_JAVA_ID_PREFIX.withSuffix(versionProvider.getVersion().toLowerCase());
5050
}
5151

52-
void addProvenanceInformation(Crate crate) {
52+
protected void addProvenanceInformation(Crate crate) {
5353
// Determine if this is the first write
5454
boolean isFirstWrite = crate.getAllContextualEntities().stream().noneMatch(
5555
entity -> entity.getId().startsWith(RO_CRATE_JAVA_ID_PREFIX.toString()))
@@ -68,7 +68,7 @@ void addProvenanceInformation(Crate crate) {
6868
crate.addContextualEntity(actionEntity);
6969
}
7070

71-
private ContextualEntity createActionEntity(boolean isFirstWrite, String libraryId) {
71+
protected ContextualEntity createActionEntity(boolean isFirstWrite, String libraryId) {
7272
return new ContextualEntityBuilder()
7373
.addType(isFirstWrite ? "CreateAction" : "UpdateAction")
7474
.addIdProperty("result", "./")
@@ -77,7 +77,7 @@ private ContextualEntity createActionEntity(boolean isFirstWrite, String library
7777
.build();
7878
}
7979

80-
private ContextualEntity buildRoCrateJavaEntity(
80+
protected ContextualEntity buildRoCrateJavaEntity(
8181
Crate crate,
8282
String newActionId,
8383
String libraryId
@@ -86,19 +86,17 @@ private ContextualEntity buildRoCrateJavaEntity(
8686
ContextualEntity self = crate.getAllContextualEntities().stream()
8787
.filter(contextualEntity -> libraryId.equals(contextualEntity.getId()))
8888
.findFirst()
89-
.orElseGet(() -> {
90-
return new ContextualEntityBuilder()
91-
.setId(libraryId)
92-
.addType("SoftwareApplication")
93-
.addProperty("name", "ro-crate-java")
94-
.addProperty("url", "https://github.com/kit-data-manager/ro-crate-java")
95-
.addProperty("version", version)
96-
.addProperty("softwareVersion", version)
97-
.addProperty("license", "Apache-2.0")
98-
.addProperty("description", "A Java library for creating and manipulating RO-Crates")
99-
.addIdProperty("Action", newActionId)
100-
.build();
101-
}
89+
.orElseGet(() -> new ContextualEntityBuilder()
90+
.setId(libraryId)
91+
.addType("SoftwareApplication")
92+
.addProperty("name", "ro-crate-java")
93+
.addProperty("url", "https://github.com/kit-data-manager/ro-crate-java")
94+
.addProperty("version", version)
95+
.addProperty("softwareVersion", version)
96+
.addProperty("license", "Apache-2.0")
97+
.addProperty("description", "A Java library for creating and manipulating RO-Crates")
98+
.addIdProperty("Action", newActionId)
99+
.build()
102100
);
103101
self.addIdProperty("Action", newActionId);
104102
return self;

src/test/java/edu/kit/datamanager/ro_crate/reader/CommonReaderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,10 @@ default void TestWithFileWithLocation(@TempDir Path temp) throws IOException {
128128
// write raw crate and imported crate to two different directories
129129
CrateWriter<String> writer = Writers.newFolderWriter();
130130
writer
131-
.withAutomaticProvenance(false)
131+
.withAutomaticProvenance(null)
132132
.save(rawCrate, rawCrateTarget.toString());
133133
writer
134-
.withAutomaticProvenance(false)
134+
.withAutomaticProvenance(null)
135135
.save(importedCrate, importedCrateTarget.toString());
136136
}
137137

src/test/java/edu/kit/datamanager/ro_crate/reader/FolderReaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class FolderReaderTest implements CommonReaderTest<String, ReadFolderStrategy>
2222
@Override
2323
public void saveCrate(Crate crate, Path target) throws IOException {
2424
Writers.newFolderWriter()
25-
.withAutomaticProvenance(false)
25+
.withAutomaticProvenance(null)
2626
.save(crate, target.toAbsolutePath().toString());
2727
assertTrue(target.toFile().isDirectory());
2828
}

src/test/java/edu/kit/datamanager/ro_crate/reader/ZipReaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class ZipReaderTest implements
1515
@Override
1616
public void saveCrate(Crate crate, Path target) throws IOException {
1717
Writers.newZipPathWriter()
18-
.withAutomaticProvenance(false)
18+
.withAutomaticProvenance(null)
1919
.save(crate, target.toAbsolutePath().toString());
2020
assertTrue(target.toFile().isFile());
2121
}

src/test/java/edu/kit/datamanager/ro_crate/reader/ZipStreamReaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void saveCrate(Crate crate, Path target) throws IOException {
3434
FileOutputStream fos = new FileOutputStream(target_file)
3535
) {
3636
Writers.newZipStreamWriter()
37-
.withAutomaticProvenance(false)
37+
.withAutomaticProvenance(null)
3838
.save(crate, fos);
3939
}
4040
assertTrue(target_file.isFile());

src/test/java/edu/kit/datamanager/ro_crate/writer/FolderWriterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class FolderWriterTest implements CommonWriterTest {
1616
@Override
1717
public void saveCrate(Crate crate, Path target) throws IOException {
1818
Writers.newFolderWriter()
19-
.withAutomaticProvenance(false)
19+
.withAutomaticProvenance(null)
2020
.save(crate, target.toAbsolutePath().toString());
2121
}
2222

src/test/java/edu/kit/datamanager/ro_crate/writer/RoCrateMetadataGenerationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ void should_AddProvenanceInfo_When_ModifyingExistingCrateWithoutProvenance(@Temp
294294

295295
// Use writer with disabled provenance (not implemented yet)
296296
Writers.newFolderWriter()
297-
.withAutomaticProvenance(false)
297+
.withAutomaticProvenance(null)
298298
.save(originalCrate, outputPath.toString());
299299

300300
// Verify the original crate has no provenance information

src/test/java/edu/kit/datamanager/ro_crate/writer/RoCrateWriterSpec12Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void writeDoesNotModifyTest(@TempDir Path tempDir) throws IOException, URISyntax
3030
Path targetDir = tempDir.resolve("spec12writeUnmodified");
3131

3232
Writers.newFolderWriter()
33-
.withAutomaticProvenance(false)
33+
.withAutomaticProvenance(null)
3434
.save(crate, targetDir.toAbsolutePath().toString());
3535

3636
// compare directories

0 commit comments

Comments
 (0)