use of mondrian.olap.Member in project pentaho-platform by pentaho.
the class MDXMetaDataTest method checkExtendedRowHeaders.
@SuppressWarnings("unchecked")
private void checkExtendedRowHeaders(List<Member> positions, Object[][] rowHeaders) {
assertNotNull(rowHeaders);
assertTrue(rowHeaders.length > 0);
for (int i = 0; i < rowHeaders.length; i++) {
for (int j = 0; j < rowHeaders[i].length; j++) {
List<Member> row = (List<Member>) positions.get(i);
String expectedValue;
if ((j == rowHeaders.length - 1)) {
Member memberExpected = (Member) row.get(j - 1);
expectedValue = memberExpected.getHierarchy().getCaption();
} else {
Member memberExpected = (Member) row.get(j);
expectedValue = memberExpected.getCaption();
}
assertEquals(expectedValue, rowHeaders[i][j]);
}
}
}
use of mondrian.olap.Member in project pentaho-platform by pentaho.
the class MDXMetaDataTest method checkExtendedRowHeaderNames.
@SuppressWarnings("unchecked")
private void checkExtendedRowHeaderNames(List<Member> positions, String[] names) {
assertNotNull(names);
assertTrue(names.length > 0);
for (int i = 0; i < names.length; i++) {
String expectedValue;
List<Member> row = (List<Member>) positions.get(0);
if ((i == row.size())) {
Member member = (Member) row.get(row.size() - 1);
expectedValue = member.getHierarchy().getName() + "{" + i + "}";
} else {
Member member = (Member) row.get(i);
expectedValue = member.getHierarchy().getCaption();
}
assertEquals(expectedValue, names[i]);
}
}
use of mondrian.olap.Member in project pentaho-platform by pentaho.
the class MDXMetaDataTest method checkRowHeaderNames.
@SuppressWarnings("unchecked")
private void checkRowHeaderNames(List<Member> positions, String[] names) {
assertNotNull(names);
assertTrue(names.length > 0);
for (int i = 0; i < names.length; i++) {
List<Member> row = (List<Member>) positions.get(0);
Member member = (Member) row.get(i);
String expectedName = "[" + member.getDimension().getName() + "].[" + member.getHierarchy().getName() + "].[" + member.getLevel().getName() + "]";
assertEquals(expectedName, names[i]);
}
}
use of mondrian.olap.Member in project pentaho-platform by pentaho.
the class InlineMemberFormatterTest method testFormatMember.
@Test
public void testFormatMember() {
Level level = mock(Level.class);
Member member = mock(Member.class);
when(member.getLevel()).thenReturn(level);
when(member.getPropertyValue(Property.KEY.getName())).thenReturn((new GregorianCalendar(1997, 0, 2).getTime()));
InlineMemberFormatter formatter = new InlineMemberFormatter();
try {
formatter.formatMember(member);
fail();
} catch (IllegalStateException execption) {
// pass
}
Annotation annotation = mock(Annotation.class);
when(annotation.getValue()).thenReturn(FORMAT);
Map<String, Annotation> annotationMap = new HashMap<>();
annotationMap.put(InlineMemberFormatter.FORMAT_STRING, annotation);
when(level.getAnnotationMap()).thenReturn(annotationMap);
String formatterMember = formatter.formatMember(member);
System.out.println(formatterMember);
assertEquals("1997-01-02", formatterMember);
}
use of mondrian.olap.Member in project pentaho-platform by pentaho.
the class MondrianModelComponent method getInitialQuery.
public static String getInitialQuery(final Connection connection, final String cubeName) throws Throwable {
String measuresMdx = null;
String columnsMdx = null;
// $NON-NLS-1$
String whereMdx = "";
StringBuffer rowsMdx = new StringBuffer();
// Get catalog info, if exists
String catalog = connection.getCatalogName();
MondrianCatalogComplementInfo catalogComplementInfo = MondrianCatalogHelper.getInstance().getCatalogComplementInfoMap(catalog);
try {
Schema schema = connection.getSchema();
if (schema == null) {
Logger.error("MondrianModelComponent", Messages.getInstance().getErrorString("MondrianModel.ERROR_0002_INVALID_SCHEMA", // $NON-NLS-1$ //$NON-NLS-2$
connection.getConnectString()));
return null;
}
Cube[] cubes = schema.getCubes();
if ((cubes == null) || (cubes.length == 0)) {
Logger.error("MondrianModelComponent", Messages.getInstance().getErrorString("MondrianModel.ERROR_0003_NO_CUBES", // $NON-NLS-1$ //$NON-NLS-2$
connection.getConnectString()));
return null;
}
if ((cubes.length > 1) && (cubeName == null)) {
Logger.error("MondrianModelComponent", Messages.getInstance().getErrorString("MondrianModel.ERROR_0004_CUBE_NOT_SPECIFIED", // $NON-NLS-1$ //$NON-NLS-2$
connection.getConnectString()));
return null;
}
Cube cube = null;
if (cubes.length == 1) {
cube = cubes[0];
} else {
for (Cube element : cubes) {
if (element.getName().equals(cubeName)) {
cube = element;
break;
}
}
}
if (cube == null) {
Logger.error("MondrianModelComponent", Messages.getInstance().getErrorString("MondrianModel.ERROR_0005_CUBE_NOT_FOUND", cubeName, // $NON-NLS-1$ //$NON-NLS-2$
connection.getConnectString()));
return null;
}
// If we have any whereConditions block, we need to find which hierarchies they are in
// and not include them in the rows
HashSet<Hierarchy> whereHierarchies = new HashSet<Hierarchy>();
if (catalogComplementInfo != null && catalogComplementInfo.getWhereCondition(cube.getName()) != null && !catalogComplementInfo.getWhereCondition(cube.getName()).equals("")) {
// $NON-NLS-1$
final String rawString = catalogComplementInfo.getWhereCondition(cube.getName());
try {
// According to Julian, the better way to resolve the names is to build a query
final String queryStr = // $NON-NLS-1$ //$NON-NLS-2$
"select " + rawString + " on columns, {} on rows from " + cube.getName();
final Query query = connection.parseQuery(queryStr);
final Hierarchy[] hierarchies = query.getMdxHierarchiesOnAxis(AxisOrdinal.StandardAxisOrdinal.COLUMNS);
boolean isWhereValid = true;
for (int i = 0; i < hierarchies.length && isWhereValid; i++) {
final Hierarchy hierarchy = hierarchies[i];
if (connection.getRole().canAccess(hierarchy)) {
whereHierarchies.add(hierarchy);
} else {
isWhereValid = false;
whereHierarchies.clear();
}
}
if (isWhereValid) {
// $NON-NLS-1$
whereMdx = " WHERE " + rawString;
}
} catch (Exception e) {
// We found an error in the where slicer, so we'll just act like it wasn't here
whereHierarchies.clear();
}
}
Dimension[] dimensions = cube.getDimensions();
if ((dimensions == null) || (dimensions.length == 0)) {
Logger.error("MondrianModelComponent", Messages.getInstance().getErrorString("MondrianModel.ERROR_0006_NO_DIMENSIONS", cubeName, // $NON-NLS-1$ //$NON-NLS-2$
connection.getConnectString()));
return null;
}
for (Dimension element : dimensions) {
final Hierarchy hierarchy = element.getHierarchy();
if (hierarchy == null) {
Logger.error("MondrianModelComponent", Messages.getInstance().getErrorString("MondrianModel.ERROR_0007_NO_HIERARCHIES", element.getName(), cubeName, // $NON-NLS-1$ //$NON-NLS-2$
connection.getConnectString()));
return null;
}
if (!connection.getRole().canAccess(hierarchy)) {
// We can't access this element
continue;
}
if (whereHierarchies.contains(hierarchy)) {
// We have it on the where condition - skip it
continue;
}
Member member = Locus.execute((RolapConnection) connection, "Retrieving default members in plugin", new Locus.Action<Member>() {
public Member execute() {
return connection.getSchemaReader().getHierarchyDefaultMember(hierarchy);
}
});
if (member == null) {
Logger.error("MondrianModelComponent", Messages.getInstance().getErrorString("MondrianModel.ERROR_0008_NO_DEFAULT_MEMBER", element.getName(), cubeName, // $NON-NLS-1$ //$NON-NLS-2$
connection.getConnectString()));
return null;
}
if (element.isMeasures()) {
// measuresMdx = "with member "+ member.getUniqueName();
// //$NON-NLS-1$
// $NON-NLS-1$
measuresMdx = "";
// $NON-NLS-1$ //$NON-NLS-2$
columnsMdx = " select NON EMPTY {" + member.getUniqueName() + "} ON columns, ";
} else {
if (rowsMdx.length() > 0) {
// $NON-NLS-1$
rowsMdx.append(", ");
}
rowsMdx.append(member.getUniqueName());
}
}
if ((measuresMdx != null) && (columnsMdx != null) && (rowsMdx.length() > 0)) {
StringBuffer result = new StringBuffer(measuresMdx.length() + columnsMdx.length() + rowsMdx.length() + 50);
// $NON-NLS-1$
result.append(measuresMdx).append(columnsMdx).append("NON EMPTY {(").append(rowsMdx).append(// $NON-NLS-1$
")} ON rows ").append(// $NON-NLS-1$ //$NON-NLS-2$
"from [" + cube.getName() + "]").append(whereMdx);
return result.toString();
}
return null;
} catch (Throwable t) {
if (t instanceof MondrianException) {
// pull the cause out, otherwise it never gets logged
Throwable cause = ((MondrianException) t).getCause();
if (cause != null) {
throw cause;
} else {
throw t;
}
} else {
throw t;
}
}
}
Aggregations