001: package org.openi.web.controller.analysis;
002:
003: //PCF
004: import java.sql.Connection;
005: import java.util.Iterator;
006: import java.util.LinkedList;
007: import java.util.List;
008: import java.util.regex.Matcher;
009: import java.util.regex.Pattern;
010:
011: import javax.servlet.http.HttpServletRequest;
012: import javax.servlet.http.HttpServletResponse;
013:
014: import org.ajaxtags.helpers.AjaxXmlBuilder;
015: import org.ajaxtags.servlets.BaseAjaxServlet;
016: import org.apache.log4j.Logger;
017: import org.openi.analysis.Datasource;
018: import org.openi.jdbc.ConnectionFactory;
019: import org.openi.jdbc.ResultAdapter;
020: import org.openi.project.JdbcDatasource;
021: import org.openi.project.ProjectContext;
022: import org.openi.xmla.XmlaConnector;
023:
024: public class ProjectContextAjaxServlet extends BaseAjaxServlet {
025: private static Logger logger = Logger
026: .getLogger(ProjectContextAjaxServlet.class);
027: private String filterPattern = "^[Ss][Yy][Ss].*";
028:
029: public ProjectContextAjaxServlet() {
030: super ();
031:
032: }
033:
034: public String getXmlContent(HttpServletRequest request,
035: HttpServletResponse response) throws Exception {
036: ProjectContext projectContext = (ProjectContext) request
037: .getSession().getAttribute("projectContext");
038: String text;
039:
040: AjaxXmlBuilder builder = new AjaxXmlBuilder();
041: String action = request.getParameter("action");
042: logger.debug("action=" + action);
043: if (action != null && action.length() > 0) {
044: if ("discoverCubes".equalsIgnoreCase(action)) {
045: String targetDatasource = request
046: .getParameter("targetDatasource");
047: if (targetDatasource != null
048: && targetDatasource.length() > 0) {
049: logger.debug("discovering cubes for: "
050: + targetDatasource);
051: Datasource datasource = projectContext
052: .getDatasource(targetDatasource);
053: Iterator cubes = new XmlaConnector().getCubeList(
054: datasource).iterator();
055:
056: while (cubes.hasNext()) {
057: String cubeName = (String) cubes.next();
058: builder.addItem(cubeName, cubeName);
059: }
060: // xmlContent = builder.toString();
061: }
062: } else if ("getOverviewKeys".equalsIgnoreCase(action)) {
063: Iterator overviewKeys = projectContext.getProject()
064: .getOverviews().keySet().iterator();
065: while (overviewKeys.hasNext()) {
066: String key = (String) overviewKeys.next();
067: builder.addItem(key, key);
068: }
069:
070: } else if ("discoverTables".equalsIgnoreCase(action)) {
071: String targetDatasource = request
072: .getParameter("targetDatasource");
073: logger.debug("targetDatasource=" + targetDatasource);
074:
075: JdbcDatasource datasource = projectContext
076: .getJdbcDatasource(targetDatasource);
077: Connection connection = ConnectionFactory
078: .getConnection(datasource);
079: ResultAdapter resultAdapter = new ResultAdapter(
080: connection);
081: List unfilteredtables = resultAdapter.getTables(null,
082: null, null, null);
083: Iterator tables = this .exclude(this .getFilterPattern(),
084: unfilteredtables).iterator();
085: resultAdapter.cleanupConnection();
086: text = projectContext
087: .getResourceString("segment.SelectTable");
088: builder.addItem(text, text);
089: while (tables.hasNext()) {
090: String tableName = (String) tables.next();
091: text = projectContext
092: .getCustomResourceString(tableName);
093: builder.addItem(text, tableName);
094: }
095: } else if ("discoverColumns".equalsIgnoreCase(action)) {
096: String targetDatasource = request
097: .getParameter("targetDatasource");
098: logger.debug("targetDatasource=" + targetDatasource);
099:
100: String targetTable = request
101: .getParameter("targetTable");
102: logger.debug("targetTable=" + targetTable);
103:
104: // TODO: hack, need this marker row:
105: text = projectContext
106: .getResourceString("segment.SelectColumn");
107: builder.addItem(text, text);
108:
109: JdbcDatasource datasource = projectContext
110: .getJdbcDatasource(targetDatasource);
111: Connection connection = ConnectionFactory
112: .getConnection(datasource);
113: ResultAdapter resultAdapter = new ResultAdapter(
114: connection);
115: List unfilteredcolumns = resultAdapter.getDbColumns(
116: null, null, targetTable, null);
117: // XXX: move this to configuration
118: Iterator columns = this .exclude(
119: this .getFilterPattern(), unfilteredcolumns)
120: .iterator();
121: while (columns.hasNext()) {
122: String columnName = (String) columns.next();
123: text = projectContext
124: .getCustomResourceString(columnName);
125: builder.addItem(text, columnName);
126: }
127: }
128:
129: }
130:
131: return builder.toString();
132: }
133:
134: private List exclude(String pattern, List input) {
135: Pattern excludePattern = Pattern.compile(pattern);
136: Matcher excludeMatcher;
137: Iterator unfiltered = input.iterator();
138: List filtered = new LinkedList();
139: while (unfiltered.hasNext()) {
140: String columnName = (String) unfiltered.next();
141: excludeMatcher = excludePattern.matcher(columnName);
142: if (excludeMatcher.matches()) {
143: // logger.debug(columnName + " exclude? " + excludeMatcher.matches());
144: } else {
145: filtered.add(columnName);
146: }
147:
148: }
149:
150: return filtered;
151: }
152:
153: public String getFilterPattern() {
154: return filterPattern;
155: }
156:
157: public void setFilterPattern(String filterPattern) {
158: this.filterPattern = filterPattern;
159: }
160:
161: }
|