Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...






























@Override
@Transactional
public List<FragmentEntity>

Map<StringObject>











List<FragmentEntity>


file
openapi.yml

add new endpoint:

Code Block
languagejava
titleNew endpoint
/v2/dataspaces/{dataspace-name}/nodes/query:
  $ref: 'cpsQueryV2.yml#/nodesByDataspaceAndCpsPath'

cpsQueryV2.yml


Code Block
languagexml
titlecpsQueryV2.yml
linenumberstrue
collapsetrue
nodesByDataspaceAndCpsPath:

  get:

    description: Query data nodes for all anchors of a given dataspace using CPS path

    tags:

      - cps-query

    summary: Query data nodes across all anchors

    operationId: getNodesByDataspaceAndCpsPath

    parameters:

      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'

      - $ref: 'components.yml#/components/parameters/cpsPathInQuery'

      - $ref: 'components.yml#/components/parameters/descendantsInQuery'

    responses:

      '200':

        description: OK

        content:

          application/json:

            schema:

              type: array

            examples:

              dataSample:

                $ref: 'components.yml#/components/examples/dataSample'

      '400':

        $ref: 'components.yml#/components/responses/BadRequest'

      '401':

        $ref: 'components.yml#/components/responses/Unauthorized'

      '403':

        $ref: 'components.yml#/components/responses/Forbidden'

      '500':

        $ref: 'components.yml#/components/responses/InternalServerError'

    x-codegen-request-body-name: xpath


FragmentRepositoryCpsPathQueryImpl.java


Code Block
languagejava
titleFragmentRepositoryCpsPathQueryImpl.java
@Override
@Transactional
public List<FragmentEntity> findByCpsPath(final CpsPathQuery cpsPathQuery) {

    final StringBuilder sqlStringBuilder = new StringBuilder("SELECT * FROM FRAGMENT");

    final 
Map<String, 
Object> queryParameters = new HashMap<>();

    sqlStringBuilder.append(" WHERE xpath ~ :xpathRegex");

    final String xpathRegex = getXpathSqlRegex(cpsPathQuery);

    queryParameters.put("xpathRegex", xpathRegex);

    if (cpsPathQuery.hasLeafConditions()) {

        sqlStringBuilder.append(" AND attributes @> :leafDataAsJson\\:\\:jsonb");

        queryParameters.put("leafDataAsJson", jsonObjectMapper.asJsonString(

                cpsPathQuery.getLeavesData()));

    }


    addTextFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters);

    final Query query = entityManager.createNativeQuery(sqlStringBuilder.toString(), FragmentEntity.class);

    setQueryParameters(query, queryParameters);

    final 
List<FragmentEntity> fragmentEntities = query.getResultList();

    log.debug("Fetched {} fragment entities by anchor and cps path.", fragmentEntities.size());

    return fragmentEntities;

}