final ArrayList<Integer> memberList = new ArrayList<Integer>();
final ArrayList<Dimension> dimensionsForMembers = new ArrayList<Dimension>();
for (int positionsIndex = 0; positionsIndex < positions.size(); positionsIndex++)
{
final Position position = positions.get(positionsIndex);
final List<Member> members = position.getMembers();
for (int positionIndex = 0; positionIndex < members.size(); positionIndex++)
{
final LinkedHashSet<String> columnNamesSet = new LinkedHashSet<String>();
Member m = members.get(positionIndex);
final Dimension dimension = m.getDimension();
while (m != null)
{
final String name = m.getLevel().getUniqueName();
if (columnNamesSet.contains(name) == false)
{
columnNamesSet.add(name);
}
m = m.getParentMember();
}
final int hierarchyLevelCount = columnNamesSet.size();
if (memberList.size() <= positionIndex)
{
memberList.add(hierarchyLevelCount);
dimensionsForMembers.add(dimension);
}
else
{
final Integer existingLevel = memberList.get(positionIndex);
if (existingLevel.intValue() < hierarchyLevelCount)
{
memberList.set(positionIndex, hierarchyLevelCount);
dimensionsForMembers.set(positionIndex, dimension);
}
}
}
}
int memberCount = 0;
for (int i = 0; i < memberList.size(); i++)
{
memberCount += memberList.get(i);
}
axesMembers[axesIndex] = memberCount;
dimensionsForMembersPerAxis[axesIndex] = dimensionsForMembers;
membersPerAxis[axesIndex] = memberList;
}
if (axesSize.length > 0)
{
rowCount = axesSize[0];
for (int i = 1; i < axesSize.length; i++)
{
final int size = axesSize[i];
rowCount *= size;
}
}
rowCount = Math.max(1, rowCount);
for (int i = 0; i < axesMembers.length; i++)
{
columnCount += axesMembers[i];
}
if (noMeasures == false)
{
columnCount += 1;
}
columnNames = new String[columnCount];
columnToDimensionMapping = new Dimension[columnCount];
columnToAxisPosition = new int[columnCount];
int columnIndex = 0;
int dimColIndex = 0;
final FastStack memberStack = new FastStack();
for (int axesIndex = axes.size() - 1; axesIndex >= 0; axesIndex -= 1)
{
final CellSetAxis axis = axes.get(axesIndex);
final List<Position> positions = axis.getPositions();
final LinkedHashSet<String> columnNamesSet = new LinkedHashSet<String>();
for (int positionsIndex = 0; positionsIndex < positions.size(); positionsIndex++)
{
final Position position = positions.get(positionsIndex);
final List<Member> members = position.getMembers();
for (int positionIndex = 0; positionIndex < members.size(); positionIndex++)
{
memberStack.clear();
Member m = members.get(positionIndex);
while (m != null)