001/*
002// This software is subject to the terms of the Eclipse Public License v1.0
003// Agreement, available at the following URL:
004// http://www.eclipse.org/legal/epl-v10.html.
005// You must accept the terms of that agreement to use this software.
006//
007// Copyright (C) 2001-2005 Julian Hyde
008// Copyright (C) 2005-2010 Pentaho and others
009// All Rights Reserved.
010*/
011package mondrian.rolap;
012
013import mondrian.olap.Util;
014
015/**
016 * The 'All' member of a {@link mondrian.rolap.RolapCubeHierarchy}.
017 *
018 * <p>A minor extension to {@link mondrian.rolap.RolapCubeMember} because the
019 * naming rules are different.
020 *
021 * @author Will Gorman, 19 October 2007
022 */
023class RolapAllCubeMember
024    extends RolapCubeMember
025{
026    protected final String name;
027    private final String uniqueName;
028
029    /**
030     * Creates a RolapAllCubeMember.
031     *
032     * @param member Member of underlying (non-cube) hierarchy
033     * @param cubeLevel Level
034     */
035    public RolapAllCubeMember(RolapMember member, RolapCubeLevel cubeLevel)
036    {
037        super(null, member, cubeLevel);
038        assert member.isAll();
039
040        // replace hierarchy name portion of all member with new name
041        if (member.getHierarchy().getName().equals(getHierarchy().getName())) {
042            name = member.getName();
043        } else {
044            // special case if we're dealing with a closure
045            String replacement =
046                getHierarchy().getName().replaceAll("\\$", "\\\\\\$");
047
048            // convert string to regular expression
049            String memberLevelName =
050                member.getHierarchy().getName().replaceAll("\\.", "\\\\.");
051
052            name = member.getName().replaceAll(memberLevelName, replacement);
053        }
054
055        // Assign unique name. We use a kludge to ensure that calc members are
056        // called [Measures].[Foo] not [Measures].[Measures].[Foo]. We can
057        // remove this code when we revisit the scheme to generate member unique
058        // names.
059        if (getHierarchy().getName().equals(getDimension().getName())) {
060            this.uniqueName = Util.makeFqName(getDimension(), name);
061        } else {
062            this.uniqueName = Util.makeFqName(getHierarchy(), name);
063        }
064    }
065
066    public String getName() {
067        return name;
068    }
069
070    @Override
071    public String getUniqueName() {
072        return uniqueName;
073    }
074}
075
076// End RolapAllCubeMember.java