Skip to content
This repository was archived by the owner on Nov 3, 2022. It is now read-only.

Commit

Permalink
Merge pull request #850 from dedica-team/844_concurrent
Browse files Browse the repository at this point in the history
[#844] concurrent labels
  • Loading branch information
bonndan authored Jan 11, 2022
2 parents 5dd0f17 + 4ff211b commit 7785a9d
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import de.bonndan.nivio.model.Label;
import de.bonndan.nivio.model.Labeled;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;

import java.util.*;

Expand Down Expand Up @@ -54,7 +55,7 @@ public Map<String, String> getLabels() {
}

@Override
public void setLabel(String key, String value) {
public void setLabel(@NonNull final String key, @Nullable final String value) {
// the decorator is not meant to be modified
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@ public interface ComponentDescription extends Component, Labeled, Linked {

void setIcon(String icon);

default void setLabel(String key, String value) {
setLabel(key, (Object) value);
}

/**
* Any-setter default implementation for deserialization.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ public Map<String, String> getLabels() {

@Override
@JsonAnySetter
public void setLabel(String key, String value) {
getLabels().put(key, value);
public void setLabel(@NonNull final String key, @Nullable final String value) {
Labeled.super.setLabel(key, value);
}

/**
Expand Down
8 changes: 2 additions & 6 deletions src/main/java/de/bonndan/nivio/model/Group.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.springframework.util.StringUtils;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

import static de.bonndan.nivio.model.ComponentDiff.compareCollections;
import static de.bonndan.nivio.model.ComponentDiff.compareStrings;
Expand All @@ -22,7 +23,7 @@ public class Group implements Component, Labeled, Linked {
private final Map<String, Link> links = new HashMap<>();

@NonNull
private final Map<String, String> labels = new HashMap<>();
private final Map<String, String> labels = new ConcurrentHashMap<>();

/**
* Items belonging to this group. Order is important for layouting (until items are ordered there).
Expand Down Expand Up @@ -139,11 +140,6 @@ public String getLabel(String key) {
return labels.get(key);
}

@Override
public void setLabel(String key, String value) {
labels.put(key, value);
}

@Override
public String getIcon() {
return getLabel(Label._icondata);
Expand Down
8 changes: 2 additions & 6 deletions src/main/java/de/bonndan/nivio/model/Item.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ public class Item implements Linked, Tagged, Labeled, Assessable, ItemComponent
private final URI address;

private final Map<String, Link> links = new HashMap<>();
private final Map<String, String> labels = new HashMap<>();

private final Map<String, String> labels = new ConcurrentHashMap<>();

/**
* Can be both read and modified by {@link ItemRelationProcessor}
Expand Down Expand Up @@ -235,11 +236,6 @@ public Map<String, String> getLabels(String prefix) {
return Labeled.withPrefix(prefix, labels);
}

@Override
public void setLabel(String key, String value) {
labels.put(key, value);
}

@Override
public String getLayer() {
if (layer == null) {
Expand Down
15 changes: 12 additions & 3 deletions src/main/java/de/bonndan/nivio/model/Labeled.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.bonndan.nivio.model;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;
import org.springframework.lang.NonNull;
Expand Down Expand Up @@ -56,7 +57,7 @@ default Map<String, String> getLabels(String prefix) {
/**
* Returns all labels with the given prefix.
*/
default Map<String, String> getLabels(Label prefix) {
default Map<String, String> getLabels(@NonNull final Label prefix) {
return getLabels(prefix.name().toLowerCase());
}

Expand All @@ -66,7 +67,15 @@ default Map<String, String> getLabels(Label prefix) {
@NonNull
Map<String, String> getLabels();

void setLabel(String key, String value);
default void setLabel(@NonNull final String key, @Nullable final String value) {
Objects.requireNonNull(key, "Trying to set label with a null key.");
if (value == null) {
getLabels().remove(key);
return;
}

getLabels().put(key, value);
}

/**
* Sets the given label.
Expand Down Expand Up @@ -138,7 +147,7 @@ default Map<String, Map<String, String>> indexedByPrefix(Label prefix) {

default Map<String, Map<String, String>> indexedByPrefix(String prefix) {
Map<String, Map<String, String>> byValue = new HashMap<>();
getLabels().forEach((s, labelValue) -> {
ImmutableMap.copyOf(getLabels()).forEach((s, labelValue) -> {
if (!s.startsWith(prefix)) {
return;
}
Expand Down
5 changes: 0 additions & 5 deletions src/main/java/de/bonndan/nivio/model/Landscape.java
Original file line number Diff line number Diff line change
Expand Up @@ -234,11 +234,6 @@ public String getLabel(String key) {
return labels.get(key);
}

@Override
public void setLabel(String key, String value) {
labels.put(key, value);
}

@Override
@NonNull
public Set<StatusValue> getAdditionalStatusValues() {
Expand Down
8 changes: 2 additions & 6 deletions src/main/java/de/bonndan/nivio/model/Relation.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import java.io.Serializable;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

import static de.bonndan.nivio.model.ComponentDiff.compareOptionals;
import static de.bonndan.nivio.model.ComponentDiff.compareStrings;
Expand All @@ -32,7 +33,7 @@ public class Relation implements Labeled, Assessable, Serializable {

private final RelationType type;

private final Map<String, String> labels = new HashMap<>();
private final Map<String, String> labels = new ConcurrentHashMap<>();

public Relation(@NonNull final Item source,
@NonNull final Item target,
Expand Down Expand Up @@ -105,11 +106,6 @@ public Map<String, String> getLabels() {
return labels;
}

@Override
public void setLabel(String key, String value) {
labels.put(key, value);
}

@Override
@NonNull
public Set<StatusValue> getAdditionalStatusValues() {
Expand Down
30 changes: 30 additions & 0 deletions src/test/java/de/bonndan/nivio/model/LabeledTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,34 @@ void add() {
assertThat(target.getLabel("foo2")).isEqualTo("1");
assertThat(target.getLabel("bar")).isEqualTo("2");
}

@Test
void setLabelWithNull() {
Item testItem = ItemFactory.getTestItem("foo", "bar");
testItem.getLabels().put("foo1", "1");

//when
testItem.setLabel("foo1", null);
testItem.setLabel("foox", null);

assertThat(testItem.getLabels()).doesNotContainKey("foo1");
assertThat(testItem.getLabels()).doesNotContainKey("foox");
}

@Test
void isConcurrent() {
Item testItem = ItemFactory.getTestItem("foo", "bar");
testItem.getLabels().put("foo1", "1");
testItem.getLabels().put("foo2", "2");
testItem.getLabels().put("foo3", "3");

assertDoesNotThrow(() -> {
testItem.getLabels().forEach((s, s2) -> {
testItem.indexedByPrefix("foo");
testItem.getLabels().put("foo4", "4");
});
});
}


}

0 comments on commit 7785a9d

Please sign in to comment.