WIP: Nested Documents UI (#3382)#3667
Draft
luis100 wants to merge 6 commits intodevelopmentfrom
Draft
Conversation
Introduces the EmailArchive metadata type as the reference implementation for Solr nested-document support in RODA — fully config-driven, zero Java. - emailarchive.xsd: XML schema (parent mailbox + child email elements) - emailarchive.xslt: ingest crosswalk producing nested Solr child docs via <field name="emails"><doc>…</doc></field> blocks; follows rakenskapsinfo pattern - Register type in roda-wui.properties and i18n ServerMessages.properties - EmailArchiveCrosswalkTest: 12 TestNG tests (full/minimal/no-emails fixtures) covering parent fields, date fields, child count, multi-value recipients, and absent-optional-field assertions Part of: #3382 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds `nestedType` and `nestedParentType` properties to SearchField so config-declared fields can carry a Solr block-join context. `SearchPanel.buildSearchFilter()` groups all nested-type fields by their (nestedType, nestedParentType) pair and wraps each group in a `ParentWhichFilterParameter` — following the RepresentationInformation pattern — instead of emitting flat filter parameters. Config registers three EmailArchive child search fields (emailSubject, emailSender, emailSentDate) as the reference example; any future nested metadata type benefits automatically through `roda-wui.properties` alone — no Java changes required. Note: the implementation uses a `nestedType` property on SearchField rather than the `nested_group` field type originally proposed in #3661. This is simpler (no new GWT widget), equally expressive, and avoids adding a UI rendering path that would be unused for all current types. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tion crosswalk Ingest XSLT now emits `title` (custodian name, emailAddress as fallback) and a fixed `level = item` so emailarchive AIPs display correctly in the browse list alongside other AIP types. New HTML dissemination crosswalk renders all mailbox-level fields with i18n labels and shows the indexed email messages as a compact table (subject, sender, sent date, folder). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Format: "Custodian <email> (dateStart / dateEnd)" Date range is omitted when both dates are absent. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR implements UI support for Solr nested documents, enabling advanced search against child document fields (e.g. individual emails inside an EmailArchive AIP) while returning parent AIPs in search results.
Closes #3382
Phases
ParentWhichFilterParameterblock-join)IndexedAIProws viaChildOfFilterParameter)Phase 1 detail
nestedType/nestedParentTypeproperties onSearchField(config-driven, no Java changes needed for new types)SearchPanel.buildSearchFilter()groups nested fields by(nestedType, nestedParentType)and wraps each group in aParentWhichFilterParameterroda-wui.properties:emailSubject,emailSender,emailSentDateTest plan
mvn -pl roda-ui/roda-wui -am gwt:compile -Pdebug-main)🤖 Generated with Claude Code