001: /*
002: * The contents of this file are subject to the terms of the Common Development
003: * and Distribution License (the License). You may not use this file except in
004: * compliance with the License.
005: *
006: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
007: * or http://www.netbeans.org/cddl.txt.
008: *
009: * When distributing Covered Code, include this CDDL Header Notice in each file
010: * and include the License file at http://www.netbeans.org/cddl.txt.
011: * If applicable, add the following below the CDDL Header, with the fields
012: * enclosed by brackets [] replaced by your own identifying information:
013: * "Portions Copyrighted [year] [name of copyright owner]"
014: *
015: * The Original Software is NetBeans. The Initial Developer of the Original
016: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
017: * Microsystems, Inc. All Rights Reserved.
018: */
019: package org.netbeans.modules.sql.framework.codegen.axion;
020:
021: import java.util.ArrayList;
022: import java.util.Collections;
023: import java.util.List;
024:
025: import org.apache.velocity.VelocityContext;
026: import org.netbeans.modules.sql.framework.codegen.AbstractDB;
027: import org.netbeans.modules.sql.framework.codegen.ColumnIdentifier;
028: import org.netbeans.modules.sql.framework.codegen.StatementContext;
029: import org.netbeans.modules.sql.framework.codegen.TemplateBuilder;
030: import org.netbeans.modules.sql.framework.model.SQLDBColumn;
031: import org.netbeans.modules.sql.framework.model.TargetTable;
032:
033: import com.sun.sql.framework.exception.BaseException;
034: import com.sun.sql.framework.jdbc.SQLPart;
035:
036: /**
037: * @author Ritesh Adval
038: */
039: public class AxionPipelineStatements extends AxionStatements {
040: public AxionPipelineStatements(AbstractDB database) {
041: super (database);
042: }
043:
044: /**
045: * Creates SQL statement to generate log details table for the given TargetTable.
046: *
047: * @param table TargetTable whose log details table is to be created
048: * @param useMemoryTable true if statement should use syntax for Axion memory table,
049: * false if a delimited flatfile table is required.
050: * @return SQLPart containing SQL statement that generates the desired log details
051: * table
052: * @exception if error occurs during statement generation
053: */
054: public SQLPart getCreateLogDetailsTableStatement(TargetTable table,
055: boolean useMemoryTable) throws BaseException {
056: StringBuilder sqlBuf = new StringBuilder(100);
057: VelocityContext vContext = createLogDetailsVelocityContext(table);
058:
059: vContext.put("useMemoryTable", Boolean.valueOf(useMemoryTable));
060: sqlBuf.append(TemplateBuilder
061: .generateSql(this .db
062: .getTemplateFileName("createLogDetailsTable"),
063: vContext));
064:
065: return createSQLPart(sqlBuf.toString(),
066: SQLPart.STMT_CREATELOGDETAILSTABLE);
067: }
068:
069: public SQLPart getCreateRemoteLogDetailsTableStatement(
070: TargetTable table, String linkName) throws BaseException {
071: StringBuilder sqlBuf = new StringBuilder(100);
072: VelocityContext vContext = createLogDetailsVelocityContext(table);
073: vContext.put("linkName", linkName);
074: vContext.put("vendor", "AXION");
075:
076: sqlBuf
077: .append(TemplateBuilder
078: .generateSql(
079: this .db
080: .getTemplateFileName("createDesignTimeLogDetailsRemoteTable"),
081: vContext));
082:
083: return createSQLPart(sqlBuf.toString(),
084: SQLPart.STMT_CREATEREMOTELOGDETAILSTABLE);
085: }
086:
087: public SQLPart getRemountRemoteLogDetailsStatement(TargetTable table)
088: throws BaseException {
089: StringBuilder sqlBuf = new StringBuilder(50);
090:
091: VelocityContext vContext = new VelocityContext();
092: vContext.put("tableName", getDetailsTableName(table));
093: vContext.put("isExternal", Boolean.TRUE);
094:
095: sqlBuf.append(TemplateBuilder.generateSql(this .db
096: .getTemplateFileName("remountTable"), vContext));
097:
098: return createSQLPart(sqlBuf.toString(),
099: SQLPart.STMT_REMOUNTREMOTETABLE);
100: }
101:
102: /**
103: * @param table
104: * @param logTableName
105: * @return
106: */
107: public SQLPart getSelectRejectedRowsCountFromDetailsTableStatement(
108: TargetTable table) throws BaseException {
109: StringBuilder sqlBuf = new StringBuilder(100);
110: VelocityContext vContext = new VelocityContext();
111:
112: String detailsTableName = getDetailsTableName(table);
113: vContext.put("targetTable", detailsTableName);
114:
115: sqlBuf
116: .append(TemplateBuilder
117: .generateSql(
118: this .db
119: .getTemplateFileName("selectRejectedRowsCountFromDetailsTable"),
120: vContext));
121:
122: return createSQLPart(sqlBuf.toString(),
123: SQLPart.STMT_SELECTREJECTEDROWCTFROMDETAILS);
124: }
125:
126: /**
127: * @param context
128: * @param context2
129: */
130: private VelocityContext createLogDetailsVelocityContext(
131: TargetTable table) {
132: StatementContext context = new StatementContext();
133: VelocityContext vContext = new VelocityContext();
134:
135: context.setUsingFullyQualifiedTablePrefix(false);
136:
137: List cIdentifiers = new ArrayList();
138: List nullableIdentifiers = new ArrayList();
139: StringBuilder columnBuf = new StringBuilder(50);
140:
141: List columns = (ArrayList) table.getColumnList();
142: for (int i = 0; i < columns.size(); i++) {
143: // should be part of expression/type Generator.
144: SQLDBColumn column = (SQLDBColumn) columns.get(i);
145: String name = db.getEscapedName(column.getName());
146:
147: int jdbcTypeInt = column.getJdbcType();
148: int precision = column.getPrecision();
149: int scale = column.getScale();
150:
151: columnBuf.setLength(0);
152: columnBuf.append(name).append(" ").append(
153: this .db.getTypeGenerator().generate(jdbcTypeInt,
154: precision, scale));
155: cIdentifiers.add(new ColumnIdentifier(null, columnBuf
156: .toString()));
157: nullableIdentifiers.add(Boolean
158: .valueOf(column.isNullable()));
159: }
160:
161: vContext.put("sourceColumnIdentifiers", cIdentifiers);
162: vContext.put("nullables", nullableIdentifiers);
163: vContext.put("pkIdentifiers", Collections.EMPTY_LIST);
164:
165: String tableName = getDetailsTableName(table);
166:
167: vContext.put("recordDelimiter", "\\r\\n");
168: vContext.put("fieldDelimiter", ",");
169: vContext.put("textQualifier", "\"");
170: vContext.put("isFirstLineHeader", "true");
171: vContext.put("ifNotExists", Boolean.TRUE);
172:
173: vContext.put("tableName", tableName);
174: vContext.put("fileName", tableName + ".bad");
175:
176: return vContext;
177: }
178: }
|