Skip to content

Commit 4dd1095

Browse files
authored
Merge pull request #183 from kit-data-manager/review-api-lists
Avoid the use of lists in APIs and replace them with appropriate interfaces.
2 parents 7b8d652 + 4e84f97 commit 4dd1095

File tree

10 files changed

+85
-124
lines changed

10 files changed

+85
-124
lines changed

src/main/java/edu/kit/datamanager/ro_crate/Crate.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import java.io.File;
44
import java.util.Collection;
5-
import java.util.List;
65
import java.util.Optional;
6+
import java.util.Set;
77

88
import edu.kit.datamanager.ro_crate.context.CrateMetadataContext;
99
import edu.kit.datamanager.ro_crate.entities.AbstractEntity;
@@ -25,13 +25,13 @@ public interface Crate {
2525
* Read version from the crate descriptor and return it as a class
2626
* representation.
2727
*
28-
* NOTE: If there is not version in the crate, it does not comply with the
28+
* NOTE: If there is no version in the crate, it does not comply with the
2929
* specification.
3030
*
3131
* @return the class representation indication the version of this crate, if
3232
* available.
3333
*/
34-
public Optional<CrateVersion> getVersion();
34+
Optional<CrateVersion> getVersion();
3535

3636
/**
3737
* Returns strings indicating the conformance of a crate with other
@@ -45,7 +45,7 @@ public interface Crate {
4545
* @return a collection of the profiles or specifications this crate conforms
4646
* to.
4747
*/
48-
public Collection<String> getProfiles();
48+
Collection<String> getProfiles();
4949

5050
CratePreview getPreview();
5151

@@ -63,11 +63,11 @@ public interface Crate {
6363

6464
DataEntity getDataEntityById(java.lang.String id);
6565

66-
List<DataEntity> getAllDataEntities();
66+
Set<DataEntity> getAllDataEntities();
6767

6868
ContextualEntity getContextualEntityById(java.lang.String id);
6969

70-
List<ContextualEntity> getAllContextualEntities();
70+
Set<ContextualEntity> getAllContextualEntities();
7171

7272
AbstractEntity getEntityById(java.lang.String id);
7373

@@ -77,15 +77,15 @@ public interface Crate {
7777

7878
void deleteEntityById(String entityId);
7979

80-
void setUntrackedFiles(List<File> files);
80+
void setUntrackedFiles(Collection<File> files);
8181

8282
void addFromCollection(Collection<AbstractEntity> entities);
8383

8484
void addItemFromDataCite(String locationUrl);
8585

86-
public void deleteValuePairFromContext(String key);
86+
void deleteValuePairFromContext(String key);
8787

88-
public void deleteUrlFromContext(String url);
88+
void deleteUrlFromContext(String url);
8989

90-
List<File> getUntrackedFiles();
90+
Collection<File> getUntrackedFiles();
9191
}

src/main/java/edu/kit/datamanager/ro_crate/RoCrate.java

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,7 @@
2424

2525
import java.io.File;
2626
import java.net.URI;
27-
import java.util.ArrayList;
28-
import java.util.Collection;
29-
import java.util.Collections;
30-
import java.util.List;
31-
import java.util.Optional;
27+
import java.util.*;
3228
import java.util.stream.Collectors;
3329
import java.util.stream.StreamSupport;
3430

@@ -50,7 +46,7 @@ public class RoCrate implements Crate {
5046
private RootDataEntity rootDataEntity;
5147
private ContextualEntity jsonDescriptor;
5248

53-
private List<File> untrackedFiles;
49+
private Collection<File> untrackedFiles;
5450

5551
@Override
5652
public CratePreview getPreview() {
@@ -86,7 +82,7 @@ public void setRootDataEntity(RootDataEntity rootDataEntity) {
8682
*/
8783
public RoCrate() {
8884
this.roCratePayload = new RoCratePayload();
89-
this.untrackedFiles = new ArrayList<>();
85+
this.untrackedFiles = new HashSet<>();
9086
this.metadataContext = new RoCrateMetadataContext();
9187
rootDataEntity = new RootDataEntity.RootDataEntityBuilder()
9288
.build();
@@ -135,7 +131,6 @@ public Collection<String> getProfiles() {
135131
return StreamSupport.stream(conformsTo.spliterator(), false)
136132
.filter(TreeNode::isObject)
137133
.map(obj -> obj.path("@id").asText())
138-
.filter(txt -> !CrateVersion.fromSpecUri(txt).isPresent())
139134
.collect(Collectors.toSet());
140135
} else {
141136
return Collections.emptySet();
@@ -167,8 +162,8 @@ public DataEntity getDataEntityById(java.lang.String id) {
167162
}
168163

169164
@Override
170-
public List<DataEntity> getAllDataEntities() {
171-
return this.roCratePayload.getAllDataEntities();
165+
public Set<DataEntity> getAllDataEntities() {
166+
return new HashSet<>(this.roCratePayload.getAllDataEntities());
172167
}
173168

174169
@Override
@@ -177,8 +172,8 @@ public ContextualEntity getContextualEntityById(String id) {
177172
}
178173

179174
@Override
180-
public List<ContextualEntity> getAllContextualEntities() {
181-
return this.roCratePayload.getAllContextualEntities();
175+
public Set<ContextualEntity> getAllContextualEntities() {
176+
return new HashSet<>(this.roCratePayload.getAllContextualEntities());
182177
}
183178

184179
@Override
@@ -213,7 +208,7 @@ public void deleteEntityById(String entityId) {
213208
}
214209

215210
@Override
216-
public void setUntrackedFiles(List<File> files) {
211+
public void setUntrackedFiles(Collection<File> files) {
217212
this.untrackedFiles = files;
218213
}
219214

@@ -238,7 +233,7 @@ public void addItemFromDataCite(String locationUrl) {
238233
}
239234

240235
@Override
241-
public List<File> getUntrackedFiles() {
236+
public Collection<File> getUntrackedFiles() {
242237
return this.untrackedFiles;
243238
}
244239

@@ -254,7 +249,7 @@ public static class RoCrateBuilder {
254249
CrateMetadataContext metadataContext;
255250
ContextualEntity license;
256251
RootDataEntity rootDataEntity;
257-
List<File> untrackedFiles;
252+
Collection<File> untrackedFiles = new HashSet<>();
258253

259254
JsonDescriptor.Builder descriptorBuilder = new JsonDescriptor.Builder();
260255

@@ -268,7 +263,6 @@ public static class RoCrateBuilder {
268263
*/
269264
public RoCrateBuilder(String name, String description, String datePublished, String licenseId) {
270265
this.payload = new RoCratePayload();
271-
this.untrackedFiles = new ArrayList<>();
272266
this.metadataContext = new RoCrateMetadataContext();
273267
this.rootDataEntity = new RootDataEntity.RootDataEntityBuilder()
274268
.addProperty("name", name)
@@ -288,7 +282,6 @@ public RoCrateBuilder(String name, String description, String datePublished, Str
288282
*/
289283
public RoCrateBuilder(String name, String description, String datePublished, ContextualEntity license) {
290284
this.payload = new RoCratePayload();
291-
this.untrackedFiles = new ArrayList<>();
292285
this.metadataContext = new RoCrateMetadataContext();
293286
this.rootDataEntity = new RootDataEntity.RootDataEntityBuilder()
294287
.addProperty("name", name)
@@ -304,7 +297,6 @@ public RoCrateBuilder(String name, String description, String datePublished, Con
304297
*/
305298
public RoCrateBuilder() {
306299
this.payload = new RoCratePayload();
307-
this.untrackedFiles = new ArrayList<>();
308300
this.metadataContext = new RoCrateMetadataContext();
309301
rootDataEntity = new RootDataEntity.RootDataEntityBuilder()
310302
.build();

src/main/java/edu/kit/datamanager/ro_crate/context/RoCrateMetadataContext.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import java.io.IOException;
1313
import java.util.HashMap;
1414
import java.util.HashSet;
15-
import java.util.List;
15+
import java.util.Collection;
1616
import java.util.Map;
1717
import java.util.Set;
1818
import java.util.function.Consumer;
@@ -49,12 +49,10 @@ public RoCrateMetadataContext() {
4949
/**
5050
* Constructor for creating the context from a list of url.
5151
*
52-
* @param url the url list with different context.
52+
* @param urls the url list with different context.
5353
*/
54-
public RoCrateMetadataContext(List<String> url) {
55-
for (String e : url) {
56-
this.addToContextFromUrl(e);
57-
}
54+
public RoCrateMetadataContext(Collection<String> urls) {
55+
urls.forEach(this::addToContextFromUrl);
5856
}
5957

6058
/**

src/main/java/edu/kit/datamanager/ro_crate/entities/AbstractEntity.java

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@
1616
import edu.kit.datamanager.ro_crate.special.JsonUtilFunctions;
1717
import edu.kit.datamanager.ro_crate.special.IdentifierUtils;
1818

19-
import java.util.ArrayList;
20-
import java.util.Collection;
21-
import java.util.HashSet;
22-
import java.util.List;
23-
import java.util.Set;
24-
import java.util.UUID;
19+
import java.util.*;
2520
import java.util.regex.Matcher;
2621
import java.util.regex.Pattern;
2722

@@ -57,16 +52,14 @@ public class AbstractEntity {
5752
private final Set<String> linkedTo;
5853

5954
@JsonIgnore
60-
private final List<Observer> observers;
55+
private final Set<Observer> observers;
6156

6257
public void addObserver(Observer observer) {
6358
this.observers.add(observer);
6459
}
6560

6661
private void notifyObservers() {
67-
for (var obs : this.observers) {
68-
obs.update(this.getId());
69-
}
62+
this.observers.forEach(observer -> observer.update(this.getId()));
7063
}
7164

7265
/**
@@ -78,7 +71,7 @@ public AbstractEntity(AbstractEntityBuilder<?> entityBuilder) {
7871
this.types = entityBuilder.types;
7972
this.properties = entityBuilder.properties;
8073
this.linkedTo = entityBuilder.relatedItems;
81-
this.observers = new ArrayList<>();
74+
this.observers = new HashSet<>();
8275
if (this.properties.get("@id") == null) {
8376
if (entityBuilder.id == null) {
8477
this.properties.put("@id", UUID.randomUUID().toString());
@@ -154,12 +147,12 @@ public void removeProperty(String key) {
154147
}
155148

156149
/**
157-
* removes a list of properties from an entity.
150+
* Removes a collection of properties from an entity.
158151
*
159-
* @param keyList list of keys, which will be removed.
152+
* @param keys collection of keys, which will be removed.
160153
*/
161-
public void removeProperties(List<String> keyList) {
162-
this.getProperties().remove(keyList);
154+
public void removeProperties(Collection<String> keys) {
155+
this.getProperties().remove(keys);
163156
this.notifyObservers();
164157
}
165158

@@ -265,12 +258,12 @@ private static JsonNode addToIdProperty(String name, String id, JsonNode propert
265258
}
266259

267260
/**
268-
* Adds everything from the stringList to the property "name" as id.
261+
* Adds everything from the properties to the property "name" as id.
269262
*
270263
* @param name the key of the property.
271-
* @param stringList List containing all the id as String.
264+
* @param properties a collection containing all the id as String.
272265
*/
273-
public void addIdListProperties(String name, Collection<String> stringList) {
266+
public void addIdListProperties(String name, Collection<String> properties) {
274267
ObjectMapper objectMapper = MyObjectMapper.getMapper();
275268
ArrayNode node = objectMapper.createArrayNode();
276269
if (this.properties.get(name) == null) {
@@ -280,7 +273,7 @@ public void addIdListProperties(String name, Collection<String> stringList) {
280273
node.add(this.properties.get(name));
281274
}
282275
}
283-
for (String s : stringList) {
276+
for (String s : properties) {
284277
this.linkedTo.add(s);
285278
node.add(objectMapper.createObjectNode().put("@id", s));
286279
}
@@ -395,12 +388,12 @@ public T addType(String type) {
395388
}
396389

397390
/**
398-
* Adding multiple types as list.
391+
* Adds multiple types in one call.
399392
*
400-
* @param types the types in a String List.
393+
* @param types the types to add.
401394
* @return the generic builder.
402395
*/
403-
public T addTypes(List<String> types) {
396+
public T addTypes(Collection<String> types) {
404397
if (this.types == null) {
405398
this.types = new HashSet<>();
406399
}

src/main/java/edu/kit/datamanager/ro_crate/entities/data/WorkflowEntity.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,23 @@
22

33
import java.util.ArrayList;
44
import java.util.List;
5+
import java.util.Set;
56

67
/**
78
* A helping class for the creation of workflow data entities.
89
*/
910
public class WorkflowEntity extends FileEntity {
1011

11-
private static final List<String> TYPES = List.of(
12-
new String[]{"SoftwareSourceCode", "ComputationalWorkflow"});
12+
private static final Set<String> TYPES = Set.of("SoftwareSourceCode", "ComputationalWorkflow");
1313

1414
/**
1515
* Constructor for creating the workflow entity from a builder.
1616
*
1717
* @param entityBuilder the builder from which the entity should be created.
1818
*/
19-
public WorkflowEntity(AbstractWorkflowEntityBuilder<?> entityBuilder) {
19+
private WorkflowEntity(AbstractWorkflowEntityBuilder<?> entityBuilder) {
2020
super(entityBuilder);
21-
for (String str : TYPES) {
22-
this.addType(str);
23-
}
21+
TYPES.forEach(this::addType);
2422
this.addIdListProperties("input", entityBuilder.input);
2523
this.addIdListProperties("output", entityBuilder.output);
2624
}

src/main/java/edu/kit/datamanager/ro_crate/payload/CratePayload.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import edu.kit.datamanager.ro_crate.entities.data.DataEntity;
88

99
import java.util.Collection;
10-
import java.util.List;
10+
import java.util.Set;
1111

1212
/**
1313
* Interface for the ROCrate payload.
@@ -32,11 +32,11 @@ public interface CratePayload {
3232

3333
void addEntities(Collection<AbstractEntity> entity);
3434

35-
List<AbstractEntity> getAllEntities();
35+
Set<AbstractEntity> getAllEntities();
3636

37-
List<DataEntity> getAllDataEntities();
37+
Set<DataEntity> getAllDataEntities();
3838

39-
List<ContextualEntity> getAllContextualEntities();
39+
Set<ContextualEntity> getAllContextualEntities();
4040

4141
ArrayNode getEntitiesMetadata();
4242

0 commit comments

Comments
 (0)