Skip to content

Commit

Permalink
parse YEARMONTHDAY as a datefield; added param/@inputPattern config
Browse files Browse the repository at this point in the history
param; refs #26711
  • Loading branch information
Keelhaul committed Jan 31, 2025
1 parent bc782db commit 3dee583
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,13 @@ public Metadata(String ownerIddoc, String label, String masterValue, String para
values.add(new MetadataValue(ownerIddoc + "_" + 0, masterValue, label));
if (StringUtils.isNotEmpty(paramValue)) {
values.get(0).getParamValues().add(new ArrayList<>());
values.get(0).getParamValues().get(0).add(paramValue);
// Apply date formatting to YEARMONTHDAY when found as additional metadata
if (SolrConstants.CALENDAR_DAY.equals(label)) {
params.add(new MetadataParameter().setType(MetadataParameterType.DATEFIELD).setInputPattern("yyyyMMdd"));
setParamValue(0, 0, Collections.singletonList(paramValue), label, null, null, null, null);
} else {
values.get(0).getParamValues().get(0).add(paramValue);
}
}
}

Expand Down Expand Up @@ -489,12 +495,13 @@ public void setParamValue(int valueIndex, int paramIndex, List<String> inValues,
break;
case DATEFIELD:
String outputPattern =
StringUtils.isNotBlank(param.getPattern()) ? param.getPattern() : BeanUtils.getNavigationHelper().getDatePattern();
StringUtils.isNotBlank(param.getOutputPattern()) ? param.getOutputPattern()
: BeanUtils.getNavigationHelper().getDatePattern();
String altOutputPattern = outputPattern.replace("dd/", "");
try {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(outputPattern);
LocalDate date = LocalDate.parse(value);
value = date.format(dateTimeFormatter);
LocalDate date = StringUtils.isNotEmpty(param.getInputPattern())
? LocalDate.parse(value, DateTimeFormatter.ofPattern(param.getInputPattern())) : LocalDate.parse(value);
value = date.format(DateTimeFormatter.ofPattern(outputPattern));
} catch (DateTimeParseException e) {
// No-day format hack
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ public static IMetadataValue getDateFieldValue(MetadataParameter param, IMetadat
IMetadataValue value = new MultiLanguageMetadataValue();
for (Locale locale : IPolyglott.getLocalesStatic()) {
String outputPattern =
StringUtils.isNotBlank(param.getPattern()) ? param.getPattern() : NavigationHelper.getDatePattern(locale);
StringUtils.isNotBlank(param.getOutputPattern()) ? param.getOutputPattern() : NavigationHelper.getDatePattern(locale);
String altOutputPattern = outputPattern.replace("dd/", "");
String dateString = "";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public enum MetadataParameterType {
FIELD("field"),
TRANSLATEDFIELD("translatedfield"),
DATEFIELD("datefield"),
DATETIMEFIELD("datetimefield"),
IDENTIFIER("identifier"),
WIKIFIELD("wikifield"),
WIKIPERSONFIELD("wikipersonfield"),
Expand Down Expand Up @@ -122,7 +123,8 @@ public static MetadataParameterType getByString(String value) {
private String prefix;
private String suffix;
private String condition = "";
private String pattern = "";
private String inputPattern = "";
private String outputPattern = "";
private boolean addUrl = false;
private boolean topstructValueFallback = false;
private boolean removeHighlighting = false;
Expand Down Expand Up @@ -360,18 +362,34 @@ public MetadataParameter setCondition(String condition) {
}

/**
* @return the pattern
* @return the inputPattern
*/
public String getPattern() {
return pattern;
public String getInputPattern() {
return inputPattern;
}

/**
* @param pattern the pattern to set
* @param inputPattern the inputPattern to set
* @return this
*/
public MetadataParameter setPattern(String pattern) {
this.pattern = pattern;
public MetadataParameter setInputPattern(String inputPattern) {
this.inputPattern = inputPattern;
return this;
}

/**
* @return the outputPattern
*/
public String getOutputPattern() {
return outputPattern;
}

/**
* @param outputPattern the outputPattern to set
* @return this
*/
public MetadataParameter setOutputPattern(String outputPattern) {
this.outputPattern = outputPattern;
return this;
}

Expand Down Expand Up @@ -481,7 +499,8 @@ public static MetadataParameter createFromConfig(HierarchicalConfiguration<Immut
String prefix = config.getString("[@prefix]", "").replace("_SPACE_", " ");
String suffix = config.getString("[@suffix]", "").replace("_SPACE_", " ");
String condition = config.getString(XML_PATH_ATTRIBUTE_CONDITION);
String pattern = config.getString("[@pattern]");
String inputPattern = config.getString("[@inputPattern]");
String outputPattern = config.getString("[@pattern]");
boolean addUrl = config.getBoolean(XML_PATH_ATTRIBUTE_URL, false);
boolean topstructValueFallback = config.getBoolean("[@topstructValueFallback]", topstructValueFallbackDefaultValue);
boolean removeHighlighting = config.getBoolean("[@removeHighlighting]", false);
Expand Down Expand Up @@ -536,7 +555,8 @@ public static MetadataParameter createFromConfig(HierarchicalConfiguration<Immut
.setPrefix(prefix)
.setSuffix(suffix)
.setCondition(condition)
.setPattern(pattern)
.setInputPattern(inputPattern)
.setOutputPattern(outputPattern)
.setAddUrl(addUrl)
.setTopstructValueFallback(topstructValueFallback)
.setRemoveHighlighting(removeHighlighting)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,7 @@ public static List<SearchHit> searchWithAggregation(String query, int first, int
SolrDocumentList childDocs = childDocsMap.getOrDefault(pi, new SolrDocumentList());
logger.trace("{} child hits found for {}", childDocs.size(), pi);
childDocs = filterChildDocs(childDocs, iddoc, searchTerms, factory);
logger.trace("{} child hits left after filtering.", childDocs.size());
hit.setChildDocs(childDocs);

// Check whether user may see full-text, before adding them to count
Expand Down Expand Up @@ -3135,7 +3136,11 @@ public static List<String> getExpandQueryFieldList(int searchType, SearchFilter
}

if (additionalFields != null) {
ret.addAll(additionalFields);
for (String field : additionalFields) {
if (!ret.contains(field)) {
ret.add(field);
}
}
}

return ret;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ public SearchHit createSearchHit(SolrDocument doc, SolrDocument ownerDoc, String
if (!additionalMetadata.isEmpty()) {
for (MetadataWrapper mw : additionalMetadata) {
browseElement.getMetadataList().add(mw.getMetadata());
logger.trace("additional: " + mw.getMetadata().getLabel() + ":" + mw.getMetadata().getFirstValue());
}
}
}
Expand Down

0 comments on commit 3dee583

Please sign in to comment.