Search in sources :

Example 56 with Member

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]);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) Member(mondrian.olap.Member)

Example 57 with Member

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]);
    }
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) Member(mondrian.olap.Member)

Example 58 with Member

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]);
    }
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) Member(mondrian.olap.Member)

Example 59 with Member

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);
}
Also used : HashMap(java.util.HashMap) GregorianCalendar(java.util.GregorianCalendar) Level(mondrian.olap.Level) Member(mondrian.olap.Member) Annotation(mondrian.olap.Annotation) Test(org.junit.Test)

Example 60 with Member

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;
        }
    }
}
Also used : Query(mondrian.olap.Query) Schema(mondrian.olap.Schema) Dimension(mondrian.olap.Dimension) MondrianException(mondrian.olap.MondrianException) Hierarchy(mondrian.olap.Hierarchy) Cube(mondrian.olap.Cube) MondrianCatalogComplementInfo(org.pentaho.platform.plugin.action.mondrian.catalog.MondrianCatalogComplementInfo) Locus(mondrian.server.Locus) MondrianException(mondrian.olap.MondrianException) Member(mondrian.olap.Member) HashSet(java.util.HashSet)

Aggregations

Member (mondrian.olap.Member)60 ArrayList (java.util.ArrayList)20 TestMember (mondrian.olap.fun.TestMember)20 List (java.util.List)15 LimitedRollupMember (mondrian.rolap.RolapHierarchy.LimitedRollupMember)13 Evaluator (mondrian.olap.Evaluator)11 MultiCardinalityDefaultMember (mondrian.rolap.RestrictedMemberReader.MultiCardinalityDefaultMember)11 SetEvaluator (mondrian.olap.Evaluator.SetEvaluator)8 Hierarchy (mondrian.olap.Hierarchy)8 TupleList (mondrian.calc.TupleList)7 Axis (mondrian.olap.Axis)7 Exp (mondrian.olap.Exp)7 Level (mondrian.olap.Level)7 HashMap (java.util.HashMap)6 LinkedHashMap (java.util.LinkedHashMap)6 HashSet (java.util.HashSet)5 UnaryTupleList (mondrian.calc.impl.UnaryTupleList)5 MemberExpr (mondrian.mdx.MemberExpr)5 LinkedHashSet (java.util.LinkedHashSet)4 ResolvedFunCall (mondrian.mdx.ResolvedFunCall)4