use of org.pentaho.metadata.model.concept.types.AggregationType 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.model.concept.types.AggregationType 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;
}
use of org.pentaho.metadata.model.concept.types.AggregationType in project data-access by pentaho.
the class DatasourceModelTest method contructRelationalModel.
private GuiStateModel contructRelationalModel(GuiStateModel guiStateModel) {
IDatabaseConnection connection = new DatabaseConnection();
connection.setAccessType(DatabaseAccessType.NATIVE);
// connection.setDriverClass("org.hsqldb.jdbcDriver");
connection.setName("SampleData");
connection.setPassword("password");
// connection.setUrl("jdbc:hsqldb:file:target/test-classes/solution1/system/data/sampledata");
connection.setUsername("pentaho_user");
List<IDatabaseConnection> connectionList = new ArrayList<IDatabaseConnection>();
connectionList.add(connection);
guiStateModel.setConnections(connectionList);
guiStateModel.setPreviewLimit("10");
guiStateModel.validateRelational();
LogicalColumn logColumn = new LogicalColumn();
logColumn.setDataType(DataType.NUMERIC);
List<AggregationType> aggTypeList = new ArrayList<AggregationType>();
aggTypeList.add(AggregationType.AVERAGE);
logColumn.setAggregationList(aggTypeList);
logColumn.setName(new LocalizedString("En", "Column1"));
BusinessData businessData = new BusinessData();
List<List<String>> dataSample = new ArrayList<List<String>>();
List<String> rowData = new ArrayList<String>();
rowData.add("Data1");
rowData.add("Data2");
rowData.add("Data3");
rowData.add("Data4");
dataSample.add(rowData);
String locale = LocaleHelper.getLocale().toString();
SqlPhysicalModel model = new SqlPhysicalModel();
SqlDataSource dataSource = new SqlDataSource();
dataSource.setDatabaseName("SampleData");
model.setDatasource(dataSource);
SqlPhysicalTable table = new SqlPhysicalTable(model);
model.getPhysicalTables().add(table);
table.setTargetTableType(TargetTableType.INLINE_SQL);
table.setTargetTable("select * from customers");
SqlPhysicalColumn column = new SqlPhysicalColumn(table);
column.setTargetColumn("customername");
column.setName(new LocalizedString(locale, "Customer Name"));
column.setDescription(new LocalizedString(locale, "Customer Name Desc"));
column.setDataType(DataType.STRING);
table.getPhysicalColumns().add(column);
LogicalModel logicalModel = new LogicalModel();
model.setId("MODEL");
model.setName(new LocalizedString(locale, "My Model"));
model.setDescription(new LocalizedString(locale, "A Description of the Model"));
LogicalTable logicalTable = new LogicalTable();
logicalTable.setPhysicalTable(table);
logicalModel.getLogicalTables().add(logicalTable);
LogicalColumn logicalColumn = new LogicalColumn();
logicalColumn.setId("LC_CUSTOMERNAME");
logicalColumn.setPhysicalColumn(column);
logicalTable.addLogicalColumn(logicalColumn);
Category mainCategory = new Category();
mainCategory.setId("CATEGORY");
mainCategory.setName(new LocalizedString(locale, "Category"));
mainCategory.addLogicalColumn(logicalColumn);
logicalModel.getCategories().add(mainCategory);
Domain domain = new Domain();
domain.addPhysicalModel(model);
domain.addLogicalModel(logicalModel);
List<LocaleType> localeTypeList = new ArrayList<LocaleType>();
localeTypeList.add(new LocaleType("Code", "Locale Description"));
domain.setLocales(localeTypeList);
businessData.setData(dataSample);
businessData.setDomain(domain);
guiStateModel.setLocaleCode("en");
guiStateModel.setLogicalModels(domain.getLogicalModels());
guiStateModel.validateRelational();
return guiStateModel;
}
use of org.pentaho.metadata.model.concept.types.AggregationType in project data-access by pentaho.
the class GuiStateModelTest method test.
@Test
public void test() {
GuiStateModel guiStateModel = new GuiStateModel();
Assert.assertEquals(0, guiStateModel.getConnections().size());
Assert.assertEquals(false, guiStateModel.isRelationalValidated());
IDatabaseConnection connection = new DatabaseConnection();
connection.setAccessType(DatabaseAccessType.NATIVE);
// connection.setDriverClass("org.hsqldb.jdbcDriver");
connection.setName("SampleData");
connection.setPassword("password");
// connection.setUrl("jdbc:hsqldb:file:target/test-classes/solution1/system/data/sampledata");
connection.setUsername("pentaho_user");
List<IDatabaseConnection> connectionList = new ArrayList<IDatabaseConnection>();
connectionList.add(connection);
guiStateModel.setConnections(connectionList);
guiStateModel.setPreviewLimit("10");
guiStateModel.validateRelational();
Assert.assertEquals(true, guiStateModel.isRelationalPreviewValidated());
// Assert.assertEquals(false, relationalModel.isValidated());
LogicalColumn logColumn = new LogicalColumn();
logColumn.setDataType(DataType.NUMERIC);
List<AggregationType> aggTypeList = new ArrayList<AggregationType>();
aggTypeList.add(AggregationType.AVERAGE);
logColumn.setAggregationList(aggTypeList);
logColumn.setName(new LocalizedString("En", "Column1"));
BusinessData businessData = new BusinessData();
List<List<String>> dataSample = new ArrayList<List<String>>();
List<String> rowData = new ArrayList<String>();
rowData.add("Data1");
rowData.add("Data2");
rowData.add("Data3");
rowData.add("Data4");
dataSample.add(rowData);
String locale = LocaleHelper.getLocale().toString();
SqlPhysicalModel model = new SqlPhysicalModel();
SqlDataSource dataSource = new SqlDataSource();
dataSource.setDatabaseName("SampleData");
model.setDatasource(dataSource);
SqlPhysicalTable table = new SqlPhysicalTable(model);
model.getPhysicalTables().add(table);
table.setTargetTableType(TargetTableType.INLINE_SQL);
table.setTargetTable("select * from customers");
SqlPhysicalColumn column = new SqlPhysicalColumn(table);
column.setTargetColumn("customername");
column.setName(new LocalizedString(locale, "Customer Name"));
column.setDescription(new LocalizedString(locale, "Customer Name Desc"));
column.setDataType(DataType.STRING);
table.getPhysicalColumns().add(column);
LogicalModel logicalModel = new LogicalModel();
model.setId("MODEL");
model.setName(new LocalizedString(locale, "My Model"));
model.setDescription(new LocalizedString(locale, "A Description of the Model"));
LogicalTable logicalTable = new LogicalTable();
logicalTable.setPhysicalTable(table);
logicalModel.getLogicalTables().add(logicalTable);
LogicalColumn logicalColumn = new LogicalColumn();
logicalColumn.setId("LC_CUSTOMERNAME");
logicalColumn.setPhysicalColumn(column);
logicalTable.addLogicalColumn(logicalColumn);
Category mainCategory = new Category();
mainCategory.setId("CATEGORY");
mainCategory.setName(new LocalizedString(locale, "Category"));
mainCategory.addLogicalColumn(logicalColumn);
logicalModel.getCategories().add(mainCategory);
Domain domain = new Domain();
domain.addPhysicalModel(model);
domain.addLogicalModel(logicalModel);
List<LocaleType> localeTypeList = new ArrayList<LocaleType>();
localeTypeList.add(new LocaleType("Code", "Locale Description"));
domain.setLocales(localeTypeList);
businessData.setData(dataSample);
businessData.setDomain(domain);
guiStateModel.setLogicalModels(domain.getLogicalModels());
guiStateModel.setLocaleCode("en");
Assert.assertEquals(true, guiStateModel.isRelationalValidated());
}
use of org.pentaho.metadata.model.concept.types.AggregationType in project data-access by pentaho.
the class MetadataServiceUtil method createColumn.
/**
* Creates a lightweight, serializable Column object from a logical model column
*
* @param m
* @param c
* @return
*/
private Column createColumn(LogicalModel m, LogicalColumn c, org.pentaho.metadata.model.Category category) {
Column col = new Column();
col.setName(c.getName(getLocale()));
col.setId(c.getId());
if (c.getFieldType() != null) {
col.setFieldType(c.getFieldType().name());
} else {
// $NON-NLS-1$
col.setFieldType("UNKNOWN");
}
col.setType(c.getDataType().getName().toUpperCase());
col.setCategory(category.getId());
// set the aggregation fields for the column
List<AggregationType> possibleAggs = c.getAggregationList();
List<String> aggTypes = new ArrayList<String>();
if (possibleAggs != null) {
for (AggregationType agg : possibleAggs) {
aggTypes.add(agg.name());
}
}
// There might be a default agg, but no agg list. If so, add it to the list.
AggregationType defaultAggType = AggregationType.NONE;
if (c.getAggregationType() != null) {
defaultAggType = c.getAggregationType();
}
if (!aggTypes.contains(defaultAggType)) {
aggTypes.add(defaultAggType.name());
}
col.setAggTypes(aggTypes);
col.setDefaultAggType(defaultAggType.name());
col.setSelectedAggType(defaultAggType.name());
// set the alignment
DataType dataType = c.getDataType();
FieldType fieldType = c.getFieldType();
// $NON-NLS-1$
Object obj = c.getProperty("alignment");
if (obj instanceof Alignment) {
if (obj == Alignment.LEFT) {
col.setHorizontalAlignment(Alignment.LEFT.toString());
} else if (obj == Alignment.RIGHT) {
col.setHorizontalAlignment(Alignment.RIGHT.toString());
} else if (obj == Alignment.CENTERED) {
col.setHorizontalAlignment(Alignment.CENTERED.toString());
}
} else if (fieldType == FieldType.FACT) {
col.setHorizontalAlignment(Alignment.RIGHT.toString());
} else if (fieldType == FieldType.OTHER && dataType == DataType.NUMERIC) {
col.setHorizontalAlignment(Alignment.RIGHT.toString());
} else {
col.setHorizontalAlignment(Alignment.LEFT.toString());
}
// set the format mask
// $NON-NLS-1$
obj = c.getProperty("mask");
if (obj != null) {
col.setFormatMask((String) obj);
}
return col;
}
Aggregations