Merge "Add contains condition support to cps-path"
authorLuke Gleeson <luke.gleeson@est.tech>
Fri, 21 Apr 2023 14:31:07 +0000 (14:31 +0000)
committerGerrit Code Review <gerrit@onap.org>
Fri, 21 Apr 2023 14:31:07 +0000 (14:31 +0000)
1  2 
cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentQueryBuilder.java

@@@ -31,6 -31,7 +31,6 @@@ import javax.persistence.PersistenceCon
  import javax.persistence.Query;
  import lombok.RequiredArgsConstructor;
  import lombok.extern.slf4j.Slf4j;
 -import org.apache.commons.collections4.CollectionUtils;
  import org.onap.cps.cpspath.parser.CpsPathPrefixType;
  import org.onap.cps.cpspath.parser.CpsPathQuery;
  import org.onap.cps.spi.entities.FragmentEntity;
@@@ -90,13 -91,14 +90,14 @@@ public class FragmentQueryBuilder 
              cpsPathQuery.getLeavesData().entrySet().forEach(entry -> {
                  sqlStringBuilder.append(" attributes @> ");
                  sqlStringBuilder.append("'" + jsonObjectMapper.asJsonString(entry) + "'");
 -                if (!CollectionUtils.isEmpty(booleanOperatorsQueue)) {
 +                if (!(booleanOperatorsQueue == null || booleanOperatorsQueue.isEmpty())) {
                      sqlStringBuilder.append(" " + booleanOperatorsQueue.poll() + " ");
                  }
              });
              sqlStringBuilder.append(")");
          }
          addTextFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters);
+         addContainsFunctionCondition(cpsPathQuery, sqlStringBuilder, queryParameters);
          final Query query = entityManager.createNativeQuery(sqlStringBuilder.toString(), FragmentEntity.class);
          setQueryParameters(query, queryParameters);
          return query;
          }
      }
  
+     private static void addContainsFunctionCondition(final CpsPathQuery cpsPathQuery,
+                                                      final StringBuilder sqlStringBuilder,
+                                                      final Map<String, Object> queryParameters) {
+         if (cpsPathQuery.hasContainsFunctionCondition()) {
+             sqlStringBuilder.append(" AND attributes ->> :containsLeafName LIKE CONCAT('%',:containsValue,'%') ");
+             queryParameters.put("containsLeafName", cpsPathQuery.getContainsFunctionConditionLeafName());
+             queryParameters.put("containsValue", cpsPathQuery.getContainsFunctionConditionValue());
+         }
+     }
      private static void setQueryParameters(final Query query, final Map<String, Object> queryParameters) {
          for (final Map.Entry<String, Object> queryParameter : queryParameters.entrySet()) {
              query.setParameter(queryParameter.getKey(), queryParameter.getValue());