Skip to content

Commit

Permalink
Rename Olap4jUtil.uniqueNameToStringArray, and add unit test.
Browse files Browse the repository at this point in the history
git-svn-id: https://olap4j.svn.sourceforge.net/svnroot/olap4j/trunk@288 c6a108a4-781c-0410-a6c6-c2d559e19af0
  • Loading branch information
julianhyde committed Oct 17, 2009
1 parent 1676e91 commit 31702dd
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java
Expand Up @@ -1672,7 +1672,7 @@ XmlaOlap4jHierarchy getHierarchy(Element row) {
final String dimensionUniqueName =
stringElement(row, "DIMENSION_UNIQUE_NAME");
String dimensionName =
Olap4jUtil.uniqueNameToStringArray(dimensionUniqueName)[0];
Olap4jUtil.parseUniqueName(dimensionUniqueName).get(0);
XmlaOlap4jDimension dimension =
getCube(row).dimensions.get(dimensionName);
dimension.getHierarchies().size();
Expand Down Expand Up @@ -1723,7 +1723,7 @@ public XmlaOlap4jLevel getLevel(Element row) {
final String dimensionUniqueName =
stringElement(row, "DIMENSION_UNIQUE_NAME");
String dimensionName =
Olap4jUtil.uniqueNameToStringArray(dimensionUniqueName)[0];
Olap4jUtil.parseUniqueName(dimensionUniqueName).get(0);
XmlaOlap4jDimension dimension =
getCube(row).dimensions.get(dimensionName);
for (Hierarchy hierarchyInit : dimension.getHierarchies()) {
Expand Down
15 changes: 13 additions & 2 deletions src/org/olap4j/impl/Olap4jUtil.java
Expand Up @@ -351,7 +351,18 @@ public static RuntimeException needToImplement(Object o) {
throw new UnsupportedOperationException("need to implement " + o);
}

public static String[] uniqueNameToStringArray(String uniqueName) {
/**
* Parses a unique name.
*
* <p>For example, {@code uniqueNameToStringArray("[foo].[bar]")} returns
* {@code ["foo", "bar"]}.
*
* @see org.olap4j.mdx.IdentifierNode#parseIdentifier(String)
*
* @param uniqueName Unique name
* @return Parsed unique name
*/
public static List<String> parseUniqueName(String uniqueName) {
List<String> trail = new ArrayList<String>();
Pattern regex = Pattern.compile("([^\\[\\]\\.]*)");
Matcher matcher = regex.matcher(uniqueName);
Expand All @@ -361,7 +372,7 @@ public static String[] uniqueNameToStringArray(String uniqueName) {
trail.add(match);
}
}
return trail.toArray(new String[trail.size()]);
return trail;
}

/**
Expand Down
36 changes: 36 additions & 0 deletions testsrc/org/olap4j/impl/Olap4jUtilTest.java
Expand Up @@ -235,6 +235,42 @@ public void testUnmodifiableArrayList() {
assertEquals(arrayList, list3);
assertEquals(arrayList.hashCode(), list3.hashCode());
}

/**
* Unit test for {@link Olap4jUtil#parseUniqueName(String)}.
*/
public void testUniqueNameToStringArray() {
List<String> a;

a = Olap4jUtil.parseUniqueName("foo.bar");
assertEquals(2, a.size());
assertEquals("foo", a.get(0));
assertEquals("bar", a.get(1));

// with spaces
a = Olap4jUtil.parseUniqueName("[foo bar].[baz]");
assertEquals(2, a.size());
assertEquals("foo bar", a.get(0));
assertEquals("baz", a.get(1));

// with dots
a = Olap4jUtil.parseUniqueName("[foo.bar].[baz]");
assertEquals(3, a.size());
assertEquals("foo", a.get(0));
assertEquals("bar", a.get(1));
assertEquals("baz", a.get(2));

// Unique names can have '&'s in them. I'm not sure that this is the
// behavior we want, but this test at least documents the current
// behavior.
a = Olap4jUtil.parseUniqueName("[customers].&[baz]&[2]");
assertEquals(5, a.size());
assertEquals("customers", a.get(0));
assertEquals("&", a.get(1));
assertEquals("baz", a.get(2));
assertEquals("&", a.get(3));
assertEquals("2", a.get(4));
}
}

// End Olap4jUtilTest.java

0 comments on commit 31702dd

Please sign in to comment.