public static QueryTask.Query addCaseInsensitiveListValueClause(String propName, Collection<String> values, MatchType termMatchType) { QueryTask.Query inClause = new QueryTask.Query(); for (String value : values) { QueryTask.Query clause = new QueryTask.Query() .setTermPropertyName(propName) .setCaseInsensitiveTermMatchValue(value) .setTermMatchType(termMatchType); clause.occurance = Occurance.SHOULD_OCCUR; if (value.contains(TENANT_IDENTIFIER) || value.contains(GROUP_IDENTIFIER) || value.contains(USER_IDENTIFIER) || value.contains(PROJECT_IDENTIFIER)) { clause.occurance = Occurance.MUST_OCCUR; } inClause.addBooleanClause(clause); if (values.size() == 1) { // if we only have one value then change it to single value clause. inClause = clause; inClause.occurance = Occurance.MUST_OCCUR; } } return inClause; }
public static QueryTask getNetworkByHostAndNameQueryTask(String hostLink, String networkName) { QueryTask queryTask = QueryUtil.buildQuery(ContainerNetworkState.class, true); String parentLinksItemField = QueryTask.QuerySpecification .buildCollectionItemName(ContainerNetworkState.FIELD_NAME_PARENT_LINKS); QueryTask.Query parentsClause = new QueryTask.Query() .setTermPropertyName(parentLinksItemField) .setTermMatchValue(hostLink) .setTermMatchType(MatchType.TERM) .setOccurance(Occurance.MUST_OCCUR); QueryTask.Query nameClause = new QueryTask.Query() .setTermPropertyName(ContainerNetworkState.FIELD_NAME_NAME) .setCaseInsensitiveTermMatchValue(networkName) .setTermMatchType(MatchType.TERM) .setOccurance(Occurance.MUST_OCCUR); QueryTask.Query stateClause = new QueryTask.Query() .setTermPropertyName(ContainerNetworkState.FIELD_NAME_POWER_STATE) .setTermMatchValue(PowerState.CONNECTED.toString()) .setTermMatchType(MatchType.TERM) .setOccurance(Occurance.MUST_OCCUR); Query intermediate = new QueryTask.Query().setOccurance(Occurance.MUST_OCCUR); intermediate.addBooleanClause(parentsClause); intermediate.addBooleanClause(nameClause); intermediate.addBooleanClause(stateClause); queryTask.querySpec.query.addBooleanClause(intermediate); QueryUtil.addExpandOption(queryTask); QueryUtil.addBroadcastOption(queryTask); return queryTask; }
public static QueryTask getVolumeByHostAndNameQueryTask(String hostLink, String volumeName) { QueryTask queryTask = QueryUtil.buildQuery(ContainerVolumeState.class, true); String parentLinksItemField = QueryTask.QuerySpecification .buildCollectionItemName(ContainerVolumeState.FIELD_NAME_PARENT_LINKS); QueryTask.Query parentsClause = new QueryTask.Query() .setTermPropertyName(parentLinksItemField) .setTermMatchValue(hostLink) .setTermMatchType(MatchType.TERM) .setOccurance(Occurance.MUST_OCCUR); QueryTask.Query nameClause = new QueryTask.Query() .setTermPropertyName(ContainerVolumeState.FIELD_NAME_NAME) .setCaseInsensitiveTermMatchValue(volumeName) .setTermMatchType(MatchType.TERM) .setOccurance(Occurance.MUST_OCCUR); QueryTask.Query stateClause = new QueryTask.Query() .setTermPropertyName(ContainerVolumeState.FIELD_NAME_POWER_STATE) .setTermMatchValue(PowerState.CONNECTED.toString()) .setTermMatchType(MatchType.TERM) .setOccurance(Occurance.MUST_OCCUR); Query intermediate = new QueryTask.Query().setOccurance(Occurance.MUST_OCCUR); intermediate.addBooleanClause(parentsClause); intermediate.addBooleanClause(nameClause); intermediate.addBooleanClause(stateClause); queryTask.querySpec.query.addBooleanClause(intermediate); QueryUtil.addExpandOption(queryTask); QueryUtil.addBroadcastOption(queryTask); return queryTask; }
/** * Add a clause which matches a top level field name with the provided {@link MatchType} and * {@link Occurance}. * @param fieldName the top level field name. * @param fieldValue the field value to match, first converted so it can match in a case insensitive way * @param matchType the match type. * @param occurance the {@link Occurance} for this clause. * @return a reference to this object. */ public Builder addCaseInsensitiveFieldClause(String fieldName, String fieldValue, MatchType matchType, Occurance occurance) { Query clause = new Query() .setTermPropertyName(fieldName) .setCaseInsensitiveTermMatchValue(fieldValue) .setTermMatchType(matchType); clause.occurance = occurance; this.query.addBooleanClause(clause); return this; }