Skip to content

Add OpenAIRE Graph API search fetcher#204

Draft
Copilot wants to merge 3 commits intomainfrom
copilot/add-support-for-searching
Draft

Add OpenAIRE Graph API search fetcher#204
Copilot wants to merge 3 commits intomainfrom
copilot/add-support-for-searching

Conversation

Copy link
Copy Markdown

Copilot AI commented Mar 29, 2026

Adds OpenAIRE as a search source in JabRef's web search, using the OpenAIRE Graph API v2.

Changes

  • OpenAireFetcher — New SearchBasedParserFetcher implementation:

    • Endpoint: https://api.openaire.eu/graph/v2/researchProducts
    • Query mapped to search parameter via DefaultQueryTransformer; results sorted by relevance, 10 per page
    • Parses JSON response fields: mainTitle, description, publicationDate, authors[].fullName, pid[scheme=doi].value, publisher, journal (name/ISSN/volume/issue/pages), subjects
    • Maps OpenAIRE types (publication, dataset, software, other) to JabRef entry types
    • Defensive subject parsing handles both flat {"value": "..."} and nested {"subject": {"value": "..."}} structures
    • Journal page fields handle both sp/ep and startPage/endPage naming variants
  • WebFetchers — Registers OpenAireFetcher in getSearchBasedFetchers()

  • OpenAireFetcherTest — Tests for URL construction, empty query handling, and live search result validation

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • api.foojay.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -Xmx6g -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)
  • api.openaire.eu
    • Triggering command: /home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js (dns block)
    • Triggering command: /usr/bin/curl curl -s REDACTED (dns block)
    • Triggering command: /usr/bin/curl curl -s --max-time 10 REDACTED ions-3.1.jar basename ttings-builder-3.9.12.jar -9.4.1.jar basename 3.0.jar basename net.�� ssworlds-2.9.0.jar basename 1.37.jar aspec-4.2.1.jar basename oto-2.3.0.jar basename (dns block)
  • central.sonatype.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -Xmx6g -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)
  • files.jabref.org
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Xmx64m -Xms64m -Dorg.gradle.appname=gradlew -jar /home/REDACTED/work/jabref/jabref/gradle/wrapper/gradle-wrapper.jar :jablib:compileJava --no-daemon -q (dns block)
  • graph.openaire.eu
    • Triggering command: /home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


📍 Connect Copilot coding agent with Jira, Azure Boards or Linear to delegate work to Copilot in one click without leaving your project management tool.

Agent-Logs-Url: https://github.com/InAnYan/jabref/sessions/f6e6a211-4680-4e7a-8c04-66cd72f0da19

Co-authored-by: InAnYan <13097618+InAnYan@users.noreply.github.com>
Copilot AI changed the title [WIP] Add support for searching in OpenAIRE Add OpenAIRE Graph API search fetcher Mar 29, 2026
Copilot AI requested a review from InAnYan March 29, 2026 19:43
Copy link
Copy Markdown
Owner

@InAnYan InAnYan left a comment

Choose a reason for hiding this comment

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

Could you please study other fetchers and n]ensure that you wrote a fetcher in a similar way other fetchers are made?

Copy link
Copy Markdown
Author

Copilot AI commented Mar 30, 2026

Could you please study other fetchers and n]ensure that you wrote a fetcher in a similar way other fetchers are made?

Updated in commit 06007e2. Key changes to align with other fetchers:

  • Switched from SearchBasedParserFetcher to PagedSearchBasedParserFetcher (consistent with ScholarArchiveFetcher, SemanticScholar, LOBIDFetcher)
  • Changed withFieldsetField (consistent with OpenAlex, ScholarArchiveFetcher, LOBIDFetcher, etc.)
  • Used AuthorList.parse() for author name normalization (like BiodiversityLibrary, ScholarArchiveFetcher)
  • Renamed parsing method to parseJSONtoBibEntry (matches naming in other fetchers)
  • Removed @NullMarked annotation (not used in most fetchers)
  • URL construction now uses the paged getURLForQuery(queryNode, pageNumber) signature with 1-based page numbers as the OpenAIRE API expects

Copilot AI requested a review from InAnYan March 30, 2026 07:12
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