Skip to content

Backend/proxy - #41

Merged
luis-godinho merged 6 commits into
backend/implementationfrom
backend/proxy
Jun 1, 2026
Merged

luis-godinho merged 6 commits into
backend/implementationfrom
backend/proxy

Conversation

@luis-godinho

Copy link
Copy Markdown
Contributor

Implementation of a proxy that default non existing endpoint to the current dicoogle backend.

…ne plugin integration

- Remove  appending in SearchController.buildQidoParams() for free-text
  queries — Lucene's QueryParser.escape() escapes the  making it a
  literal character, so  never matched anything.
- Add listAllInstances() to QueryIndexStorageLocator interface and all
  implementors (LuceneQueryIndexPlugin, FileReadOnlyStoragePlugin,
  FileReadWriteStoragePlugin) for the /dump endpoint.
- Merge application-test.yml duplicate query.lucene keys into one section.
- Restore application.yml from backend/implementation with lucene +
  legacy-proxy config (was overwritten by proxy merge).
- Remove stale FileReadWriteDimseFindPlugin bean from FileQueryConfig.
- Add jackson-databind and spring-boot-starter-test deps to dicomweb module.
- Add spring-boot-starter-web and mockwebserver 4.12.0 to legacy-proxy
  module for compilation.
- Fix privateTagFallsBackToHex test tag (0x00090011 -> 0x00091001) to
  avoid dcm4che PrivateCreatorID handling.
…ExceptionHandler catch-all from swallowing NoResourceFoundException
@luis-godinho
luis-godinho merged commit 6a74557 into backend/implementation Jun 1, 2026
public final class DicomTagTransformer {

/** DICOM tag for pixel data — always excluded from dump output. */
private static final int TAG_PIXEL_DATA = 0x7FE00010;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DICOM tag constants are already available in dcm4che. If you import org.dcm4che3.data.Tag:

Suggested change
private static final int TAG_PIXEL_DATA = 0x7FE00010;
private static final int TAG_PIXEL_DATA = Tag.PixelData;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changes can be found on the following PR

* @return an unordered list of all instance URIs; empty if none are indexed
* @throws IOException if a recoverable I/O error occurs during lookup
*/
List<URI> listAllInstances() throws IOException;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still recommend that this method is dropped. The alternatives, depending on use case:

  • Use the query interface with a catch-all query to get a list of all instances;
  • Use list/get operations of the storage provider to recursively find all files in storage.

for (QueryIndexStorageLocator plugin : queryLocators) {
List<URI> allLocations;
try {
allLocations = plugin.listAllInstances();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to proceed with defining the internal query interface. It does not make sense to request the full list of instances when the goal of this method is to retrieve the attributes of a single instance.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changes can be found on the following PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants