use of org.molgenis.data.meta.AttributeType in project molgenis by molgenis.
the class DocumentContentBuilderTest method createDocumentStringProvider.
@DataProvider(name = "createDocumentString")
public static Iterator<Object[]> createDocumentStringProvider() {
List<Object[]> dataItems = new ArrayList<>();
for (AttributeType attributeType : EnumSet.of(EMAIL, ENUM, HTML, HYPERLINK, SCRIPT, STRING, TEXT)) {
dataItems.add(new Object[] { attributeType, null, "{\"attr\":null}" });
dataItems.add(new Object[] { attributeType, "abc", "{\"attr\":\"abc\"}" });
dataItems.add(new Object[] { attributeType, "", "{\"attr\":\"\"}" });
}
return dataItems.iterator();
}
use of org.molgenis.data.meta.AttributeType in project molgenis by molgenis.
the class EntityHydration method dehydrate.
/**
* Creates a Map containing the values required to rebuild this entity.
* For references to other entities only stores the ids.
*
* @param entity the {@link Entity} to dehydrate
* @return Map representation of the entity
*/
public Map<String, Object> dehydrate(Entity entity) {
LOG.trace("Dehydrating entity {}", entity);
Map<String, Object> dehydratedEntity = newHashMap();
EntityType entityType = entity.getEntityType();
entityType.getAtomicAttributes().forEach(attribute -> {
// Only dehydrate if the attribute is NOT computed
if (!attribute.hasExpression()) {
String name = attribute.getName();
AttributeType type = attribute.getDataType();
dehydratedEntity.put(name, getValueBasedOnType(entity, name, type));
}
});
return dehydratedEntity;
}
use of org.molgenis.data.meta.AttributeType in project molgenis by molgenis.
the class QueryGenerator method createQueryClauseEqualsNoValue.
private QueryBuilder createQueryClauseEqualsNoValue(QueryRule queryRule, EntityType entityType) {
List<Attribute> attributePath = getAttributePath(queryRule.getField(), entityType);
String fieldName = getQueryFieldName(attributePath);
Attribute attr = attributePath.get(0);
AttributeType attrType = attr.getDataType();
switch(attrType) {
case BOOL:
case DATE:
case DATE_TIME:
case DECIMAL:
case EMAIL:
case ENUM:
case HTML:
case HYPERLINK:
case INT:
case LONG:
case SCRIPT:
case STRING:
case TEXT:
return QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(fieldName));
case CATEGORICAL:
case CATEGORICAL_MREF:
case FILE:
case MREF:
case ONE_TO_MANY:
case XREF:
if (attributePath.size() > 1) {
throw new MolgenisQueryException("Can not filter on references deeper than 1.");
}
Attribute refIdAttr = attr.getRefEntity().getIdAttribute();
List<Attribute> refAttributePath = concat(attributePath.stream(), of(refIdAttr)).collect(toList());
String indexFieldName = getQueryFieldName(refAttributePath);
return QueryBuilders.boolQuery().mustNot(QueryBuilders.nestedQuery(fieldName, QueryBuilders.existsQuery(indexFieldName), ScoreMode.Avg));
case COMPOUND:
throw new MolgenisQueryException(format("Illegal attribute type [%s]", attrType.toString()));
default:
throw new UnexpectedEnumException(attrType);
}
}
use of org.molgenis.data.meta.AttributeType in project molgenis by molgenis.
the class QueryGenerator method createQueryClauseSearchAttribute.
private QueryBuilder createQueryClauseSearchAttribute(QueryRule queryRule, EntityType entityType) {
List<Attribute> attributePath = getAttributePath(queryRule.getField(), entityType);
Attribute attr = attributePath.get(attributePath.size() - 1);
Object queryValue = getQueryValue(attr, queryRule.getValue());
String fieldName = getQueryFieldName(attributePath);
AttributeType dataType = attr.getDataType();
switch(dataType) {
case DATE:
case DATE_TIME:
case DECIMAL:
case EMAIL:
case ENUM:
case HTML:
case HYPERLINK:
case INT:
case LONG:
case SCRIPT:
case STRING:
case TEXT:
return nestedQueryBuilder(attributePath, QueryBuilders.matchQuery(fieldName, queryValue));
case CATEGORICAL:
case CATEGORICAL_MREF:
case MREF:
case ONE_TO_MANY:
case XREF:
case FILE:
if (attributePath.size() > 1) {
throw new UnsupportedOperationException("Can not filter on references deeper than 1.");
}
return QueryBuilders.nestedQuery(fieldName, QueryBuilders.matchQuery(fieldName + '.' + "_all", queryValue), ScoreMode.Avg);
case BOOL:
throw new MolgenisQueryException("Cannot execute search query on [" + dataType + "] attribute");
case COMPOUND:
throw new MolgenisQueryException("Illegal data type [" + dataType + "] for operator [" + QueryRule.Operator.SEARCH + "]");
default:
throw new UnexpectedEnumException(dataType);
}
}
use of org.molgenis.data.meta.AttributeType in project molgenis by molgenis.
the class QueryGenerator method createQueryClauseIn.
private QueryBuilder createQueryClauseIn(QueryRule queryRule, EntityType entityType) {
List<Attribute> attributePath = getAttributePath(queryRule.getField(), entityType);
Attribute attr = attributePath.get(attributePath.size() - 1);
Object queryRuleValue = queryRule.getValue();
if (queryRuleValue == null) {
throw new MolgenisQueryException("Query value cannot be null");
}
if (!(queryRuleValue instanceof Iterable<?>)) {
throw new MolgenisQueryException("Query value must be a Iterable instead of [" + queryRuleValue.getClass().getSimpleName() + "]");
}
Object[] queryValues = StreamSupport.stream(((Iterable<?>) queryRuleValue).spliterator(), false).map(aQueryRuleValue -> getQueryValue(attr, aQueryRuleValue)).toArray();
QueryBuilder queryBuilder;
String fieldName = getQueryFieldName(attr);
AttributeType dataType = attr.getDataType();
switch(dataType) {
case BOOL:
case DATE:
case DATE_TIME:
case DECIMAL:
case EMAIL:
case ENUM:
case HTML:
case HYPERLINK:
case INT:
case LONG:
case SCRIPT:
case STRING:
case TEXT:
if (useNotAnalyzedField(attr)) {
fieldName = fieldName + '.' + FIELD_NOT_ANALYZED;
}
// note: inFilter expects array, not iterable
queryBuilder = QueryBuilders.termsQuery(fieldName, queryValues);
queryBuilder = nestedQueryBuilder(attributePath, queryBuilder);
break;
case CATEGORICAL:
case CATEGORICAL_MREF:
case MREF:
case XREF:
case FILE:
case ONE_TO_MANY:
if (attributePath.size() > 1) {
throw new UnsupportedOperationException("Can not filter on references deeper than 1.");
}
Attribute refIdAttr = attr.getRefEntity().getIdAttribute();
List<Attribute> refAttributePath = concat(attributePath.stream(), of(refIdAttr)).collect(toList());
String indexFieldName = getQueryFieldName(refAttributePath);
if (useNotAnalyzedField(refIdAttr)) {
indexFieldName = indexFieldName + '.' + FIELD_NOT_ANALYZED;
}
queryBuilder = QueryBuilders.termsQuery(indexFieldName, queryValues);
queryBuilder = QueryBuilders.nestedQuery(fieldName, queryBuilder, ScoreMode.Avg);
break;
case COMPOUND:
throw new MolgenisQueryException("Illegal data type [" + dataType + "] for operator [" + QueryRule.Operator.IN + "]");
default:
throw new UnexpectedEnumException(dataType);
}
return QueryBuilders.constantScoreQuery(queryBuilder);
}
Aggregations