Skip to content

Commit

Permalink
(#24): use QualifiedMap's YAML for todo data-transfer (2)
Browse files Browse the repository at this point in the history
  • Loading branch information
andi-huber committed Jun 18, 2024
1 parent 830eea1 commit 2859035
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 1 deletion.
11 changes: 10 additions & 1 deletion commons/src/main/java/dita/commons/qmap/Dtos.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package dita.commons.qmap;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

Expand All @@ -35,6 +36,7 @@
import lombok.experimental.UtilityClass;

import dita.commons.jaxb.JaxbAdapters;
import dita.commons.qmap.QualifiedMap.QualifiedMapKey;
import dita.commons.sid.SemanticIdentifier;
import dita.commons.sid.SemanticIdentifierSet;

Expand Down Expand Up @@ -90,7 +92,14 @@ QualifiedMap fromDto(@Nullable final QualifiedMapDto dto) {
dto.qualifiedMapEntries.forEach(map::put);
return map;
}


QualifiedMap fromDtoAllowEmptyTargets(@Nullable final QualifiedMapDto dto) {
if(dto==null) return null;
var internalMap = new HashMap<QualifiedMapKey, QualifiedMapEntry>();
dto.qualifiedMapEntries.forEach(e->internalMap.put(QualifiedMapKey.from(e), e));
return new QualifiedMap(internalMap);
}

// -- HELPER

private JacksonCustomizer yamlOptions() {
Expand Down
34 changes: 34 additions & 0 deletions commons/src/main/java/dita/commons/qmap/QualifiedMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
import java.util.function.UnaryOperator;
import java.util.stream.Stream;

import org.springframework.lang.Nullable;
Expand Down Expand Up @@ -58,6 +59,22 @@ static QualifiedMapKey from(@NonNull final QualifiedMapEntry entry) {
return new QualifiedMapKey(entry.source(), SemanticIdentifierSet.nullToEmpty(entry.qualifier()));
}

public QualifiedMapKey withSource(final SemanticIdentifier source) {
return new QualifiedMapKey(source, qualifier);
}
public QualifiedMapKey withQualifier(final SemanticIdentifierSet qualifier) {
return new QualifiedMapKey(source, qualifier);
}
public QualifiedMapKey mapSource(final UnaryOperator<SemanticIdentifier> sourceMapper) {
return withSource(sourceMapper.apply(source));
}
public QualifiedMapKey mapQualifier(final UnaryOperator<SemanticIdentifierSet> qualifierMapper) {
return withQualifier(qualifierMapper.apply(qualifier));
}
public QualifiedMapKey mapQualifierElementwise(final UnaryOperator<SemanticIdentifier> qualifierElementwiseMapper) {
return mapQualifier(set->SemanticIdentifierSet.ofStream(set.elements().stream().map(qualifierElementwiseMapper)));
}

@Override
public int compareTo(final @Nullable QualifiedMapKey o) {
return compare(this, o);
Expand All @@ -76,6 +93,18 @@ public String shortFormat(final String primaryDelimiter, final String secondaryD
+ qualifier().shortFormat(secondaryDelimiter);
}

/**
* @param primaryDelimiter that separates source and qualifier
* @param secondaryDelimiter that separates the qualifier elements
*/
public String fullFormat(final String primaryDelimiter, final String secondaryDelimiter) {
return qualifier().elements().isEmpty()
? source().fullFormat(":")
: source().fullFormat(":")
+ primaryDelimiter
+ qualifier().fullFormat(secondaryDelimiter);
}

// -- UTILITY

public static int compare(
Expand Down Expand Up @@ -193,4 +222,9 @@ public static Try<QualifiedMap> tryFromYaml(@Nullable final DataSource ds) {
.mapSuccessAsNullable(Dtos::fromDto);
}

public static Try<QualifiedMap> tryFromYamlAllowEmptyTargets(@Nullable final DataSource ds) {
return QualifiedMapDto.tryFromYaml(ds)
.mapSuccessAsNullable(Dtos::fromDtoAllowEmptyTargets);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import java.util.function.UnaryOperator;

import dita.commons.qmap.QualifiedMap.QualifiedMapKey;
import dita.commons.sid.SemanticIdentifier;
import dita.commons.sid.SemanticIdentifierSet;

Expand All @@ -41,6 +42,10 @@ public record QualifiedMapEntry(
*/
SemanticIdentifier target) {

public QualifiedMapKey key() {
return new QualifiedMapKey(source(), qualifier());
}

// -- WITHER

public QualifiedMapEntry withSource(final SemanticIdentifier source) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,15 @@ public String shortFormat(final String delimiter) {
.collect(Collectors.joining(delimiter));
}

/**
* @param delimiter that separates the elements
*/
public String fullFormat(final String delimiter) {
return elements().stream()
.map(elem->elem.fullFormat(":"))
.collect(Collectors.joining(delimiter));
}

// -- UTILITY

public static int compare(
Expand Down

0 comments on commit 2859035

Please sign in to comment.