Skip to content

Commit

Permalink
Reports / Refactor retrieveMetadataTitle (#6413)
Browse files Browse the repository at this point in the history
* Improve report - refactor retrieveMetadataTitle aiming to retrieve other fields

* Update services/src/main/java/org/fao/geonet/api/reports/ReportUtils.java

* Refactor (use of StringUtils.isNotEmpty)

Co-authored-by: François Prunayre <fx.prunayre@gmail.com>
  • Loading branch information
davinciagf and fxprunayre committed Jun 21, 2022
1 parent 7c8ce3c commit 23640cc
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,8 @@ public void create(final ServiceContext context,

Optional<Metadata> metadata = metadataRepository.findById(fileDownload.getMetadataId());
String metadataUuid = metadata.get().getUuid();
String metadataTitle = ReportUtils.retrieveMetadataTitle(metadataUuid);
String metadataTitle = ReportUtils.retrieveMetadataIndex(
metadataUuid, "resourceTitleObject", "default");

List<String> record = new ArrayList<>();
record.add(metadataUuid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,8 @@ public void create(final ServiceContext context,
}


String mdTitle = ReportUtils.retrieveMetadataTitle(metadata.getUuid());
String mdTitle = ReportUtils.retrieveMetadataIndex(
metadata.getUuid(), "resourceTitleObject", "default");

// Build the record element with the information for the report
List<String> record = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,8 @@ public void create(final ServiceContext context,
}
}

String mdTitle = ReportUtils.retrieveMetadataTitle(
metadata.getUuid());
String mdTitle = ReportUtils.retrieveMetadataIndex(
metadata.getUuid(), "resourceTitleObject", "default");

// Build the record element with the information for the report
List<String> record = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ public void create(final ServiceContext context,

Optional<Metadata> metadata = metadataRepository.findById(fileUpload.getMetadataId());
String metadataUuid = metadata.get().getUuid();
String metadataTitle = ReportUtils.retrieveMetadataTitle(metadataUuid);
String metadataTitle = ReportUtils.retrieveMetadataIndex(
metadataUuid, "resourceTitleObject", "default");


// Online resource description from the index ...
Expand Down
44 changes: 31 additions & 13 deletions services/src/main/java/org/fao/geonet/api/reports/ReportUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import jeeves.server.context.ServiceContext;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.QuoteMode;
import org.apache.commons.lang.StringUtils;
import org.fao.geonet.ApplicationContextHolder;
import org.fao.geonet.GeonetContext;
import org.fao.geonet.constants.Geonet;
Expand Down Expand Up @@ -122,13 +123,15 @@ public static Set<Integer> groupsForFilter(


/**
* Retrieves a metadata title from the Lucene index.
* Retrieves a metadata field from the index.
*
* @param metadataUuid Metadata identifier.
* @return Metadata title.
* @param fieldName Lucene field name.
* @param fieldNameKey Key of the field name (eg 'default').
* @return Metadata field.
*/
public static String retrieveMetadataTitle(final String metadataUuid) {
return retrieveMetadataIndexField(metadataUuid, "title");
public static String retrieveMetadataIndex(final String metadataUuid,final String fieldName, final String fieldNameKey) {
return retrieveMetadataIndexField(metadataUuid, fieldName, fieldNameKey);
}


Expand All @@ -137,25 +140,40 @@ public static String retrieveMetadataTitle(final String metadataUuid) {
* <p>
* Duplicated with XslUtil - to refactor.
* <p>
* TODO / TODOES
* TODO / TODOES improve the management of the different type of fields
*
* @param metadataUuid Metadata identifier.
* @param fieldName Lucene field name.
* @param fieldNameKey Key of the field name (eg 'default').
* @return Field value.
*/
private static String retrieveMetadataIndexField(
final String metadataUuid,
final String fieldName) {
final String fieldName,
final String fieldNameKey) {
EsSearchManager searchManager = ApplicationContextHolder.get().getBean(EsSearchManager.class);
try {
Map<String, Object> mdIndexFields = searchManager.getDocument(metadataUuid);
if ("title".equals(fieldName)) {
Object titleObjectField = mdIndexFields.get(IndexFields.RESOURCE_TITLE + "Object");
Object titleField = mdIndexFields.get(IndexFields.RESOURCE_TITLE);
if (titleObjectField instanceof HashMap) {
return (String) ((HashMap<?, ?>) titleObjectField).get("default");
} else if (titleField instanceof String) {
return (String) titleField;
Object field = mdIndexFields.get(fieldName);
if (field instanceof HashMap) {
if (StringUtils.isNotEmpty(fieldNameKey)) {
return (String) ((HashMap<?, ?>) field).get(fieldNameKey);
} else {
return (String) field.toString();
}
} else if (field instanceof String) {
return (String) field;
} else if (field instanceof ArrayList) {
Object fieldItem = ((ArrayList<?>) field).get(0);
if (fieldItem instanceof HashMap) {
if (StringUtils.isNotEmpty(fieldNameKey)) {
return (String) ((HashMap<?, ?>) fieldItem).get(fieldNameKey);
} else {
return (String) fieldItem.toString();
}
}
else if (fieldItem instanceof String) {
return (String) fieldItem;
}
}
} catch (Exception e) {
Expand Down

0 comments on commit 23640cc

Please sign in to comment.