From 0646d5f0f3964aa4fca7c52d6347c6a828253054 Mon Sep 17 00:00:00 2001 From: Luc Boudreau Date: Mon, 2 Apr 2012 14:33:33 +0000 Subject: [PATCH] Fixes compatibility issues with Essbase. Essbase expects the DataSourceInfo element to be a tad different than other backends. Contribution by Mark Semsel. git-svn-id: https://olap4j.svn.sourceforge.net/svnroot/olap4j/trunk@525 c6a108a4-781c-0410-a6c6-c2d559e19af0 --- .../driver/xmla/XmlaOlap4jConnection.java | 46 ++++++++++++++++++- .../driver/xmla/XmlaOlap4jStatement.java | 15 +++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java b/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java index 863d81a..caee134 100644 --- a/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java +++ b/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java @@ -809,6 +809,39 @@ public Scenario getScenario() { throw new UnsupportedOperationException(); } + /** + * Enumeration of server backends. Use + * {@link BackendFlavor#getFlavor(XmlaOlap4jConnection)} + * to get the vendor for a given connection. + */ + static enum BackendFlavor { + MONDRIAN("Mondrian"), + SSAS("Microsoft"), + PALO("Palo"), + SAP("SAP"), + ESSBASE("Essbase"), + UNKNOWN(""); + + private final String token; + + private BackendFlavor(String token) { + this.token = token; + } + + static BackendFlavor getFlavor(XmlaOlap4jConnection conn) + throws OlapException + { + final String dataSourceInfo = + conn.getOlapDatabase().getDataSourceInfo(); + for (BackendFlavor flavor : BackendFlavor.values()) { + if (dataSourceInfo.contains(flavor.token)) { + return flavor; + } + } + throw new AssertionError("Can't determine the backend vendor."); + } + } + void populateList( List list, Context context, @@ -1017,8 +1050,19 @@ public String generateRequest( // Add the datasource node only if this request requires it. if (metadataRequest.requiresDatasourceName()) { + final String dataSourceInfo; + switch (BackendFlavor.getFlavor(context.olap4jConnection)) { + case ESSBASE: + dataSourceInfo = + context.olap4jConnection.getOlapDatabase() + .getDataSourceInfo(); + break; + default: + dataSourceInfo = + context.olap4jConnection.getDatabase(); + } buf.append(" "); - xmlEncode(buf, context.olap4jConnection.getDatabase()); + xmlEncode(buf, dataSourceInfo); buf.append("\n"); } diff --git a/src/org/olap4j/driver/xmla/XmlaOlap4jStatement.java b/src/org/olap4j/driver/xmla/XmlaOlap4jStatement.java index 79e06fa..e14371a 100644 --- a/src/org/olap4j/driver/xmla/XmlaOlap4jStatement.java +++ b/src/org/olap4j/driver/xmla/XmlaOlap4jStatement.java @@ -20,6 +20,7 @@ package org.olap4j.driver.xmla; import org.olap4j.*; +import org.olap4j.driver.xmla.XmlaOlap4jConnection.BackendFlavor; import org.olap4j.mdx.*; import java.io.StringWriter; @@ -291,9 +292,21 @@ public boolean isWrapperFor(Class iface) throws SQLException { public CellSet executeOlapQuery(String mdx) throws OlapException { final String catalog = olap4jConnection.getCatalog(); - final String dataSourceInfo = olap4jConnection.getDatabase(); final String roleName = olap4jConnection.getRoleName(); final String propList = olap4jConnection.makeConnectionPropertyList(); + + final String dataSourceInfo; + switch (BackendFlavor.getFlavor(olap4jConnection)) { + case ESSBASE: + dataSourceInfo = + olap4jConnection.getOlapDatabase() + .getDataSourceInfo(); + break; + default: + dataSourceInfo = + olap4jConnection.getDatabase(); + } + StringBuilder buf = new StringBuilder( "\n" + "