/*
* Relational_2.java
*
* Copyright 2004-2006 by SAP AG. All Rights Reserved.
* SAP, R/3, mySAP, mySAP.com, xApps, xApp, SAP NetWeaver, and other SAP
* products and services mentioned herein as well as their respective logos
* are trademarks or registered trademarks of SAP AG in Germany and in several
* other countries all over the world. All other product and service names
* mentioned are the trademarks of their respective companies. Data contained
* in this document serves informational purposes only. National product
* specifications may vary.
*
* These materials are subject to change without notice. These materials are
* provided by SAP AG and its affiliated companies ("SAP Group") for
* informational purposes only, without representation or warranty of any kind,
* and SAP Group shall not be liable for errors or omissions with respect to
* the materials. The only warranties for SAP Group products and services are
* those that are set forth in the express warranty statements accompanying
* such products and services, if any. Nothing herein should be construed as
* constituting an additional warranty.
*/
package com.sap.ip.bi.sdk.samples;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.omg.cwm.resource.relational.Catalog;
import org.omg.cwm.resource.relational.Column;
import org.omg.cwm.resource.relational.Schema;
import org.omg.cwm.resource.relational.Table;
import com.sap.exception.IBaseException;
import com.sap.ip.bi.sdk.dac.connector.IBIConnection;
import com.sap.ip.bi.sdk.dac.connector.IBIRelational;
import com.sap.ip.bi.sdk.dac.connector.IBIRelationalObjectFinder;
import com.sap.ip.bi.sdk.samples.servlet.MinimalServletContainer;
/**
* Accessing metadata 2 -
*
* Demonstrates three different ways to retrieve relational metadata:
*
* 1. via connection-level methods
* 2. via ObjectFinder methods
* 3. via JMI methods
*
* View the HTML rendered by this servlet in the following file:
* [SDK archive]/docs/examples/relational_2.result.html
*
* @author SAP
* @version 3.50
* @since 3.50
*/
public class Relational_2 extends HttpServlet {
private final static String CONTENT_TYPE = "text/html";
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String sep = "";
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println(Helpers.getDocTypeDefinition());
out.println("<html>");
out.println("<head><title>Relational_2</title>");
out.println(Helpers.getStyleSheetDefinition());
out.println("</head><body>");
try {
// ********************************************************
// Connect to a data source.
// ********************************************************
IBIConnection connection = Helpers.connectToJDBCDatasource(out);
IBIRelational rel = connection.getRelational();
// create JDBC sample data where needed
Helpers.createJDBCSampleData();
//************************************************
// Retrieve metadata via
// connection-level methods: getCatalog(), getSchema(),
// getTable().
// These methods allow you to browse metadata objects such
// as schemas and tables.
// Typically, the retrieved objects are used then as an
// entry point to further "navigate" to objects that are
// contained in these name-space-like objects.
//************************************************
out.println("<h3>Accessing metadata via connection-level methods</h3>");
// the list of catalogs contained in the connected resource
List catalogs = rel.getCatalog();
out.println("<h4>Retrieving catalogs with rel.getCatalog()</h4>");
out.println("<p>");
sep = "";
int count = 0;
for (int i = 0; i < catalogs.size(); i++) {
count++;
Catalog catalog = (Catalog) catalogs.get(i);
out.print(
sep + "\"<span class=\"code\">" + catalog.getName() + "</span>\"");
if ("".equals(catalog.getName())) {
out.print(" (dummy catalog)");
}
sep = ", ";
}
if (count == 0
|| (count == 1 && "".equals(((Catalog) catalogs.get(0)).getName()))) {
out.println("<br>(catalogs not supported in this data source)");
}
out.println("<p>");
// the list of schemas contained in the connected resource
List schemas = rel.getSchema();
out.println("<h4>Retrieving schemas with rel.getSchema()</h4>");
out.println("<p>");
sep = "";
count = 0;
for (int i = 0; i < schemas.size(); i++) {
count++;
Schema schema = (Schema) schemas.get(i);
out.print(
sep + "\"<span class=\"code\">" + schema.getName() + "</span>\"");
if ("".equals(schema.getName())) {
out.print(" (dummy schema)");
}
sep = ", ";
}
if (count == 0
|| (count == 1 && "".equals(((Schema) schemas.get(0)).getName()))) {
out.println("<br>(schemas not supported in this data source)");
}
out.println("<p>");
//*********************************************************
// Retrieve metadata via ObjectFinder methods -
// these methods provide the ability to retrieve a specific
// object or a set of objects.
//*********************************************************
IBIRelationalObjectFinder finder = rel.getObjectFinder();
out.println("<hr><h3>Accessing metadata via object finder methods</h3>");
// retrieve a specific table
Table table =
(Table) finder.findTable((String) null, (String) null, "%").get(0);
out.println(
"<h4>Find method findCube(String catalogName,String schemaName, String tableNamePattern)</h4>");
out.println("<p>Found cube: " + table.getName() + "</p>");
out.println("<p>");
//*********************************************************
// Retrieve metadata via CWM-based JMI interfaces -
// starting from the top-level objects of the Relational
// Metadata Model, such as Table, you can the use the
// JMI interfaces provided by each object to "navigate" to
// associated objects.
// The following code passage shows how to retrieve from a
// given table its associated columns and the schema and
// catalog to which it belongs.
//*********************************************************
out.println("<hr><h3>Accessing metadata via JMI methods</h3>");
// retrieve from a given table its schema and catalog
String tableName = table.getName();
out.println(
"<h4>Retrieving schema and catalog of table \""
+ tableName
+ "\"</h4>");
Schema schema = (Schema) table.getNamespace();
if (schema != null) {
out.println(
"<p>Schema of " + tableName + ": \"" + schema.getName() + "\"</p>");
Catalog catalog = (Catalog) schema.getNamespace();
out.println(
"<p>Catalog of "
+ tableName
+ ":"
+ " \""
+ catalog.getName()
+ " \""
+ "</p>");
}
out.println("<p>");
// retrieve from a given table its list of columns
out.println("<h4>Iterating the list of columns of a table</h4>");
Iterator itColumns = table.getFeature().iterator();
sep = "";
while (itColumns.hasNext()) {
Column column = (Column) itColumns.next();
out.println(sep + "\"" + column.getName() + "\"");
sep = ", ";
}
out.println("<p>");
}
// Catch errors.
catch (Exception e) {
// $JL-EXC$
e.printStackTrace();
if (e instanceof IBaseException)
out.println("Error: " +
((IBaseException)e).getNestedLocalizedMessage());
else
out.println("Error: " + e.getMessage());
}
out.println("</body>");
out.println("</html>");
}
public void destroy() {
}
public static void main(String[] args) {
if (args.length == 1) {
MinimalServletContainer.executeServlet(new Relational_2(), args[0]);
} else {
MinimalServletContainer.executeServlet(new Relational_2(), System.out);
}
}
}