/*
* Relational_1.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.samples.servlet.MinimalServletContainer;
/**
* Accessing metadata -
*
* Illustrates the process of retrieving relational metadata from
* catalog to column from a JDBC data source.
*
* View the HTML rendered by this servlet in the following file:
* [SDK archive]/docs/examples/relational_1.result.html
*
* @author SAP
* @version 3.50
* @since 3.50
*/
public class Relational_1 extends HttpServlet {
private static final 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 {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println(Helpers.getDocTypeDefinition());
out.println("<html>");
out.println("<head><title>Relational_1</title>");
out.println(Helpers.getStyleSheetDefinition());
out.println("</head><body>");
try {
// ********************************************************
// Connect to a JDBC database via the BI JDBC Connector.
// ********************************************************
IBIConnection connection = Helpers.connectToJDBCDatasource(out);
IBIRelational rel = connection.getRelational();
// create JDBC sample data where needed
Helpers.createJDBCSampleData();
// ********************************************************
// Retrieve metadata.
// ********************************************************
// Get the collection of catalogs.
List catalogs = rel.getCatalog();
// Navigate list of org.omg.cwm.resource.relational.Catalog
// instances.
int count = 0;
out.println("<h3>Catalogs:</h3>");
for (Iterator i = catalogs.iterator(); i.hasNext();) {
count++;
Catalog catalog = (Catalog) i.next();
out.print(
"\"<span class=\"code\">" + catalog.getName() + "</span>\"");
if ("".equals(catalog.getName())) {
out.println(" (dummy catalog)");
}
out.println("<br>");
if (count > 10) {
// print only the first 10 items
out.println("…<br>");
break;
}
}
if (count == 0
|| (count == 1
&& "".equals(((Catalog) catalogs.get(0)).getName()))) {
out.println("(catalogs not supported in this data source)");
}
out.println("<p>");
// Get the collection of schemas.
List schemas = rel.getSchema();
// Navigate list of org.omg.cwm.resource.relational.Schema
// instances.
count = 0;
out.println("<h3>Schemas:</h3>");
for (Iterator i = schemas.iterator(); i.hasNext();) {
count++;
Schema schema = (Schema) i.next();
out.print(
"\"<span class=\"code\">" + schema.getName() + "</span>\"");
if ("".equals(schema.getName())) {
out.println(" (dummy schema)");
;
}
out.println("<br>");
if (count > 10) {
// print only the first 10 items
out.println("…<br>");
break;
}
}
if (count == 0
|| (count == 1
&& "".equals(((Schema) schemas.get(0)).getName()))) {
out.println("(schemas not supported in this data source)");
}
out.println("<p>");
// Get the collection of tables.
List tables = rel.getTable();
// Navigate list of org.omg.cwm.resource.relational.Table
// instances.
count = 0;
out.println("<h3>Tables:</h3>");
Table tab = null;
out.println("<table border=\"1\">");
out.println("<tr><td class=\"headCenter\">Table Names</td></tr>");
int s = 0;
for (Iterator i = tables.iterator(); i.hasNext();) {
String style = (s & 1) == 1 ? "\"odd\"" : "\"even\"";
s++;
count++;
Table table = (Table) i.next();
if (tab == null) {
// save the first table
tab = table;
}
out.println(
"<tr>"
+ "<td class="
+ style
+ ">\"<span class=\"code\">"
+ table.getName()
+ "</span>\"</td></tr>");
if (count > 10) {
// print only the first 10 items
out.println("<tr><td class=" + style + ">…</td></tr>");
break;
}
}
out.println("</table><p>");
// display details of the first table
if (tab != null) {
out.println("<h3>Schema Navigation:</h3>");
// display the catalog/schema/columns of the first
// table
String schemaName = null;
String catalogName = null;
String tableName =
"\"<span class=\"code\">" + tab.getName() + "</span>\"";
if (tab.getNamespace() != null) {
schemaName =
"\"<span class=\"code\">"
+ ((Schema) tab.getNamespace()).getName()
+ "</span>\"";
if (tab.getNamespace().getNamespace() != null) {
catalogName =
"\"<span class=\"code\">"
+ ((Catalog) tab.getNamespace().getNamespace()).getName()
+ "</span>\"";
}
}
out.println(
"<table border=\"1\"><tr>"
+ "<td class=\"headCenter\">Catalogs</td>"
+ "<td class=\"headCenter\">Schemas</td>"
+ "<td class=\"headCenter\">Tables</td>"
+ "<td class=\"headCenter\">Columns</td>"
+ "</tr>");
s = 0;
count = 0;
List cols = tab.getFeature();
String style = "\"even\"";
for (Iterator i = cols.iterator(); i.hasNext();) {
s++;
count++;
Column col = (Column) i.next();
out.println(
"<tr>"
+ "<td class="
+ style
+ ">"
+ "<span class=\"code\">"
+ catalogName
+ "</span></td>"
+ "<td class="
+ style
+ ">"
+ "<span class=\"code\">"
+ schemaName
+ "</span></td>"
+ "<td class="
+ style
+ ">"
+ "<span class=\"code\">"
+ tableName
+ "</span></td>"
+ "<td class="
+ style
+ ">"
+ "<span class=\"code\">\""
+ col.getName()
+ "</span>\"</td>"
+ "</tr>");
style = (s & 1) == 1 ? "\"odd\"" : "\"even\"";
if (count > 10) {
// print only the first 10 items
out.println(
"<tr><td colspan=\"4\" class=" + style + ">…</td></tr>");
break;
}
catalogName = schemaName = tableName = "";
}
out.println("</table>");
}
}
// 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_1(),
args[0]);
} else {
MinimalServletContainer.executeServlet(
new Relational_1(),
System.out);
}
}
}