use of org.pentaho.metadata.query.model.CombinationType in project data-access by pentaho.
the class MetadataServiceUtil method convertQuery.
/**
* Converts a thin query model into a full query
*
* @param src
* @return
*/
public org.pentaho.metadata.query.model.Query convertQuery(Query src) {
IMetadataDomainRepository domainRepository = getMetadataRepository();
Domain fullDomain = domainRepository.getDomain(src.getDomainName());
LogicalModel logicalModel = fullDomain.findLogicalModel(src.getModelId());
// create a new full query object
org.pentaho.metadata.query.model.Query dest = new org.pentaho.metadata.query.model.Query(fullDomain, logicalModel);
// now add the selections
List<Selection> selections = dest.getSelections();
for (Column column : src.getColumns()) {
// get the objects needed for the selection
LogicalColumn logicalColumn = logicalModel.findLogicalColumn(column.getId());
org.pentaho.metadata.model.Category category = getCategory(column.getId(), logicalModel);
AggregationType aggregationType = AggregationType.valueOf(column.getSelectedAggType());
// create a selection and add it to the list
Selection selection = new Selection(category, logicalColumn, aggregationType);
selections.add(selection);
}
// now add the filters
List<Constraint> constraints = dest.getConstraints();
for (Condition condition : src.getConditions()) {
org.pentaho.metadata.query.model.CombinationType combinationType = CombinationType.valueOf(condition.getCombinationType());
LogicalColumn logicalColumn = logicalModel.findLogicalColumn(condition.getColumn());
String paramName = null;
for (Parameter parameter : src.getParameters()) {
if (parameter.getColumn().equals(condition.getColumn())) {
paramName = parameter.getName() == null ? parameter.getColumn() : parameter.getName();
}
}
// condition.setParameterized(parameterized);
String formula = condition.getCondition(logicalColumn.getDataType().name(), paramName);
Constraint constraint = new Constraint(combinationType, formula);
constraints.add(constraint);
}
// now set the disable distinct option
if (src.getDisableDistinct() != null) {
dest.setDisableDistinct(src.getDisableDistinct());
}
// now add the sorting information
List<org.pentaho.metadata.query.model.Order> orders = dest.getOrders();
for (Order order : src.getOrders()) {
// find the selection
for (Selection selection : selections) {
if (selection.getLogicalColumn().getId().equals(order.getColumn())) {
Type type = Type.valueOf(order.getOrderType());
org.pentaho.metadata.query.model.Order fullOrder = new org.pentaho.metadata.query.model.Order(selection, type);
orders.add(fullOrder);
}
}
}
// now add the parameter information
List<org.pentaho.metadata.query.model.Parameter> parameters = dest.getParameters();
for (Parameter parameter : src.getParameters()) {
// find the column for this parameter
LogicalColumn logicalColumn = logicalModel.findLogicalColumn(parameter.getColumn());
DataType type = logicalColumn.getDataType();
String[] value = parameter.getValue();
org.pentaho.metadata.query.model.Parameter fullParam = new org.pentaho.metadata.query.model.Parameter(parameter.getColumn(), type, value[0]);
parameters.add(fullParam);
}
return dest;
}
use of org.pentaho.metadata.query.model.CombinationType in project data-access by pentaho.
the class MetadataServiceTest method buildQuery.
private Query buildQuery() {
// Build the query Columns
AggregationType defaultAggType = AggregationType.NONE;
Column[] columns = new Column[1];
Column column = mock(Column.class);
when(column.getId()).thenReturn(COLUMN_ID);
when(column.getName()).thenReturn(COLUMN_NAME);
when(column.getSelectedAggType()).thenReturn(defaultAggType.name());
columns[0] = column;
// Build the query Conditions
CombinationType combinationType = CombinationType.AND;
Condition[] conditions = new Condition[1];
Condition condition = mock(Condition.class);
when(condition.getCombinationType()).thenReturn(combinationType.name());
when(condition.getColumn()).thenReturn(COLUMN_NAME);
when(condition.getCondition(anyString(), anyString())).thenReturn("[" + CATEGORY_NAME + "." + COLUMN_NAME + "] = " + VALUE);
conditions[0] = condition;
// Build the query Parameters
String[] values = { VALUE };
Parameter[] parameters = new Parameter[1];
Parameter parameter = mock(Parameter.class);
when(parameter.getColumn()).thenReturn(COLUMN_NAME);
when(parameter.getValue()).thenReturn(values);
parameters[0] = parameter;
// Build the query Order
Order[] orders = new Order[1];
Order order = mock(Order.class);
orders[0] = order;
// Build the Query
Query query = mock(Query.class);
when(query.getDomainName()).thenReturn(DOMAIN_ID);
when(query.getModelId()).thenReturn(LOGICAL_MODEL_ID);
when(query.getColumns()).thenReturn(columns);
when(query.getConditions()).thenReturn(conditions);
when(query.getParameters()).thenReturn(parameters);
when(query.getOrders()).thenReturn(orders);
return query;
}
Aggregations