PageRenderTime 51ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/eclipse-dtp-1.10/org.eclipse.datatools.sqltools-DTP_1_10_0_Release_201206131012/plugins/org.eclipse.datatools.sqltools.sqlbuilder/src/org/eclipse/datatools/sqltools/sqlbuilder/expressionbuilder/function/FunctionBuilderPage.java

#
Java | 1003 lines | 884 code | 100 blank | 19 comment | 334 complexity | 2f655fe2294805191924536dd5075a28 MD5 | raw file
  1. /*******************************************************************************
  2. * Copyright Š 2000, 2007 IBM Corporation and others.
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which is available at
  6. * http://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * IBM Corporation - initial API and implementation
  10. *******************************************************************************/
  11. package org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.function;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import org.eclipse.datatools.modelbase.sql.query.QueryValueExpression;
  15. import org.eclipse.datatools.modelbase.sql.query.SQLQueryObject;
  16. import org.eclipse.datatools.modelbase.sql.query.ValueExpressionCombined;
  17. import org.eclipse.datatools.modelbase.sql.query.ValueExpressionFunction;
  18. import org.eclipse.datatools.sqltools.sqlbuilder.Messages;
  19. import org.eclipse.datatools.sqltools.sqlbuilder.SQLBuilderContextIds;
  20. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.CloudscapeFunctionNamesAndSignatures;
  21. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.ExpressionBuilderWizard;
  22. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.FunctionNamesAndSignatures;
  23. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.InformixFunctionNamesAndSignatures;
  24. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.InstantDBFunctionNamesAndSignatures;
  25. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.MSSQLServerFunctionNamesAndSignatures;
  26. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.MySQLFunctionNamesAndSignatures;
  27. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.OracleFunctionNamesAndSignatures;
  28. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.OracleV9FunctionNamesAndSignatures;
  29. import org.eclipse.datatools.sqltools.sqlbuilder.expressionbuilder.SybaseFunctionNamesAndSignatures;
  30. import org.eclipse.datatools.sqltools.sqlbuilder.model.ExpressionHelper;
  31. import org.eclipse.datatools.sqltools.sqlbuilder.model.FunctionHelper;
  32. import org.eclipse.datatools.sqltools.sqlbuilder.model.FunctionHelperDB2;
  33. import org.eclipse.datatools.sqltools.sqlbuilder.model.SQLDomainModel;
  34. import org.eclipse.datatools.sqltools.sqlbuilder.util.StringUtility;
  35. import org.eclipse.datatools.sqltools.sqlbuilder.util.ViewUtility;
  36. import org.eclipse.jface.dialogs.MessageDialog;
  37. import org.eclipse.jface.wizard.WizardPage;
  38. import org.eclipse.swt.SWT;
  39. import org.eclipse.swt.events.SelectionEvent;
  40. import org.eclipse.swt.events.SelectionListener;
  41. import org.eclipse.swt.layout.GridData;
  42. import org.eclipse.swt.layout.GridLayout;
  43. import org.eclipse.swt.widgets.Combo;
  44. import org.eclipse.swt.widgets.Composite;
  45. import org.eclipse.swt.widgets.Event;
  46. import org.eclipse.swt.widgets.Label;
  47. import org.eclipse.swt.widgets.Text;
  48. import org.eclipse.ui.help.WorkbenchHelp;
  49. public class FunctionBuilderPage extends WizardPage implements SelectionListener {
  50. private SQLDomainModel domainModel;
  51. private SQLQueryObject sqlStatement;
  52. private Composite paramPanel;
  53. private ValueExpressionFunction valueExprFunc;
  54. private int numOfParameters = 0;
  55. private Text previewExpressionText;
  56. private ParamTable paramTable;
  57. private Combo functionsCategoryCombo;
  58. private Combo functionsList;
  59. private Combo functionsSignaturesCombo;
  60. private int currentCategoryIndex = -1;
  61. private boolean isColumn;
  62. private String inputFunctionString = "";
  63. public FunctionBuilderPage(SQLDomainModel domainModel, SQLQueryObject sqlStatementArg, ValueExpressionFunction inExpr, boolean isColumn) {
  64. super(Messages._UI_WIZARD_FUNCTION_BUILDER_HEADING);
  65. setTitle(Messages._UI_WIZARD_FUNCTION_BUILDER_HEADING);
  66. setDescription(Messages._UI_WIZARD_FUNCTION_BUILDER_EXPL);
  67. setPageComplete(false);
  68. this.domainModel = domainModel;
  69. sqlStatement = sqlStatementArg;
  70. valueExprFunc = inExpr;
  71. if (valueExprFunc == null) {
  72. valueExprFunc = ExpressionHelper.createFunction("");
  73. }
  74. this.isColumn = isColumn;
  75. }
  76. public FunctionBuilderPage(SQLDomainModel domainModel, SQLQueryObject sqlStatementArg, ValueExpressionFunction inSqlExpr) {
  77. super(Messages._UI_WIZARD_FUNCTION_BUILDER_HEADING);
  78. setTitle(Messages._UI_WIZARD_FUNCTION_BUILDER_HEADING);
  79. setDescription(Messages._UI_WIZARD_FUNCTION_BUILDER_EXPL);
  80. setPageComplete(false);
  81. this.domainModel = domainModel;
  82. sqlStatement = sqlStatementArg;
  83. valueExprFunc = inSqlExpr;
  84. if (valueExprFunc == null) {
  85. valueExprFunc = ExpressionHelper.createFunction("");
  86. }
  87. this.isColumn = false;
  88. }
  89. public void createControl(Composite parent) {
  90. Composite mainPanel = new Composite(parent, SWT.NONE);
  91. WorkbenchHelp.setHelp(mainPanel, SQLBuilderContextIds.SQLE_FUNCTION_BUILDER_PAGE);
  92. GridLayout mainPanelLayout = new GridLayout();
  93. mainPanel.setLayout(mainPanelLayout);
  94. mainPanel.setLayoutData(ViewUtility.createFill());
  95. Label chooseFcnTypeLabel = new Label(mainPanel, SWT.LEFT | SWT.HORIZONTAL);
  96. chooseFcnTypeLabel.setText(Messages._UI_WIZARD_FUNCTION_BUILDER_INSTR_CAT);
  97. chooseFcnTypeLabel.setLayoutData(ViewUtility.createHorizontalFill());
  98. functionsCategoryCombo = new Combo(mainPanel, SWT.DROP_DOWN | SWT.READ_ONLY);
  99. functionsCategoryCombo.setLayoutData(ViewUtility.createHorizontalFill());
  100. functionsCategoryCombo.addSelectionListener(this);
  101. Label chooseFunctionLabel = new Label(mainPanel, SWT.LEFT | SWT.HORIZONTAL);
  102. chooseFunctionLabel.setText(Messages._UI_WIZARD_FUNCTION_BUILDER_INSTR_FCN);
  103. chooseFunctionLabel.setLayoutData(ViewUtility.createHorizontalFill());
  104. Composite listPanel = new Composite(mainPanel, SWT.NONE);
  105. GridLayout listPanelLayout = new GridLayout();
  106. listPanelLayout.horizontalSpacing = 0;
  107. listPanelLayout.verticalSpacing = 0;
  108. listPanelLayout.marginWidth = 0;
  109. listPanelLayout.marginHeight = 0;
  110. listPanel.setLayout(listPanelLayout);
  111. listPanel.setLayoutData(ViewUtility.createHorizontalFill());
  112. functionsList = new Combo(listPanel, SWT.DROP_DOWN | SWT.READ_ONLY);
  113. functionsList.setLayoutData(ViewUtility.createHorizontalFill());
  114. functionsList.addSelectionListener(this);
  115. Label selectSignatureLabel = new Label(mainPanel, SWT.LEFT | SWT.HORIZONTAL);
  116. selectSignatureLabel.setText(Messages._UI_WIZARD_FUNCTION_BUILDER_INSTR_SIG);
  117. functionsSignaturesCombo = new Combo(mainPanel, SWT.DROP_DOWN | SWT.READ_ONLY);
  118. functionsSignaturesCombo.setLayoutData(ViewUtility.createHorizontalFill());
  119. functionsSignaturesCombo.addSelectionListener(this);
  120. Label enterValuesLabel = new Label(mainPanel, SWT.LEFT | SWT.HORIZONTAL);
  121. enterValuesLabel.setText(Messages._UI_WIZARD_FUNCTION_BUILDER_INSTR_EXPR);
  122. paramPanel = new Composite(mainPanel, SWT.NONE);
  123. GridLayout paramPanelLayout = new GridLayout();
  124. paramPanelLayout.marginWidth = 0;
  125. paramPanel.setLayout(paramPanelLayout);
  126. GridData data = new GridData();
  127. data.grabExcessVerticalSpace = true;
  128. data.horizontalAlignment = GridData.FILL;
  129. data.verticalAlignment = GridData.FILL;
  130. paramPanel.setLayoutData(data);
  131. paramTable = new ParamTable(this, paramPanel, domainModel, sqlStatement);
  132. paramTable.setInput(valueExprFunc);
  133. paramTable.getTable().setLayoutData(ViewUtility.createFill());
  134. Label previewFunctionLabel = new Label(paramPanel, SWT.LEFT | SWT.HORIZONTAL);
  135. previewFunctionLabel.setText(Messages._UI_WIZARD_FUNCTION_BUILDER_INSTR_PRE);
  136. previewExpressionText = new Text(paramPanel, SWT.BORDER | SWT.READ_ONLY | SWT.V_SCROLL | SWT.WRAP);
  137. previewExpressionText.setLayoutData(ViewUtility.createFill());
  138. setControl(mainPanel);
  139. }
  140. public void setParamValue(int paramNo, QueryValueExpression value) {
  141. List paramList = valueExprFunc.getParameterList();
  142. if (paramNo < paramList.size() && value != null) {
  143. paramList.set(paramNo, value);
  144. }
  145. if (paramNo < paramList.size() && value == null) { //set a default value
  146. QueryValueExpression expr = ExpressionHelper.createExpression();
  147. paramList.set(paramNo, expr);
  148. }
  149. else if (paramList.size() < numOfParameters) {
  150. paramList.add(value);
  151. }
  152. }
  153. public void insertParamValue(int paramNo, QueryValueExpression value) {
  154. List paramList = valueExprFunc.getParameterList();
  155. paramList.add(paramNo, value);
  156. }
  157. public void widgetDefaultSelected(SelectionEvent se) {
  158. }
  159. public void widgetSelected(SelectionEvent se) {
  160. if (se.widget == functionsCategoryCombo) {
  161. if (currentCategoryIndex != functionsCategoryCombo.getSelectionIndex()) {
  162. fillFunctionsList();
  163. currentCategoryIndex = functionsCategoryCombo.getSelectionIndex();
  164. functionsList.select(0);
  165. functionsList.notifyListeners(SWT.Selection, new Event());
  166. updateFinishButton();
  167. }
  168. }
  169. else if (se.widget == functionsList) {
  170. populateFunctionsSignaturesCombo();
  171. functionsSignaturesCombo.select(0);
  172. String functionSelected = functionsList.getText();
  173. Object[][] formats = new Object[0][0];
  174. if (domainModel.getVendor().isDB2()) {
  175. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  176. formats = funcHelper.getFunctionSignatures(functionSelected);
  177. if (funcHelper.getIsFunctionAllowingStar(functionSelected)) {
  178. paramTable.setSupportsStar(true);
  179. }
  180. else {
  181. paramTable.setSupportsStar(false);
  182. }
  183. }
  184. // TODO: the XxxxFunctionNamesAndSignatures classes should be rewritten
  185. // to be subclasses of FunctionHelper. Then all this grungy isXXX_Vnn()
  186. // code scattered throughout this class can be removed.
  187. else if (domainModel.getVendor().isOracle_V8()) {
  188. formats = OracleFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  189. if (OracleFunctionNamesAndSignatures.isFunctionSupportingStar(functionSelected)) {
  190. paramTable.setSupportsStar(true);
  191. }
  192. else {
  193. paramTable.setSupportsStar(false);
  194. }
  195. }
  196. else if (domainModel.getVendor().isOracle_V9()) {
  197. formats = OracleV9FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  198. if (OracleV9FunctionNamesAndSignatures.isFunctionSupportingStar(functionSelected)) {
  199. paramTable.setSupportsStar(true);
  200. }
  201. else {
  202. paramTable.setSupportsStar(false);
  203. }
  204. }
  205. else if (domainModel.getVendor().isMySQL()) {
  206. formats = MySQLFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  207. if (MySQLFunctionNamesAndSignatures.isFunctionSupportingStar(functionSelected)) {
  208. paramTable.setSupportsStar(true);
  209. }
  210. else {
  211. paramTable.setSupportsStar(false);
  212. }
  213. }
  214. else if (domainModel.getVendor().isSybase()) {
  215. formats = SybaseFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  216. if (SybaseFunctionNamesAndSignatures.isFunctionSupportingStar(functionSelected)) {
  217. paramTable.setSupportsStar(true);
  218. }
  219. else {
  220. paramTable.setSupportsStar(false);
  221. }
  222. }
  223. else if (domainModel.getVendor().isMSSQLServer()) {
  224. formats = MSSQLServerFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  225. if (MSSQLServerFunctionNamesAndSignatures.isFunctionSupportingStar(functionSelected)) {
  226. paramTable.setSupportsStar(true);
  227. }
  228. else {
  229. paramTable.setSupportsStar(false);
  230. }
  231. }
  232. else if (domainModel.getVendor().isInformix()) {
  233. formats = InformixFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  234. if (InformixFunctionNamesAndSignatures.isFunctionSupportingStar(functionSelected)) {
  235. paramTable.setSupportsStar(true);
  236. }
  237. else {
  238. paramTable.setSupportsStar(false);
  239. }
  240. }
  241. else if (domainModel.getVendor().isInstantDB()) {
  242. formats = InstantDBFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  243. if (InstantDBFunctionNamesAndSignatures.isFunctionSupportingStar(functionSelected)) {
  244. paramTable.setSupportsStar(true);
  245. }
  246. else {
  247. paramTable.setSupportsStar(false);
  248. }
  249. }
  250. else if (domainModel.getVendor().isCloudscape()) {
  251. formats = CloudscapeFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  252. if (CloudscapeFunctionNamesAndSignatures.isFunctionSupportingStar(functionSelected)) {
  253. paramTable.setSupportsStar(true);
  254. }
  255. else {
  256. paramTable.setSupportsStar(false);
  257. }
  258. }
  259. else {
  260. formats = FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  261. }
  262. Object[] paramFormats = new Object[0];
  263. int index = functionsSignaturesCombo.getSelectionIndex();
  264. if (index >= 0 && index < formats.length) {
  265. paramFormats = formats[index];
  266. }
  267. //reset the number of parameters value
  268. numOfParameters = 0;
  269. for (int i = 1; i < paramFormats.length; i++) {
  270. if (paramFormats[i] != null)
  271. if (paramFormats[i].toString().length() > 0)
  272. numOfParameters++;
  273. }
  274. List paramsList = valueExprFunc.getParameterList();
  275. ArrayList tempList = new ArrayList();
  276. tempList.addAll(paramsList);
  277. int size = tempList.size();
  278. paramsList.clear();
  279. QueryValueExpression expr;
  280. for (int i = 0; i < numOfParameters; i++) {
  281. if (i < size && tempList.get(i) != null) {
  282. expr = (QueryValueExpression) tempList.get(i);
  283. }
  284. else {
  285. expr = ExpressionHelper.createExpression();
  286. }
  287. paramsList.add(expr);
  288. }
  289. paramTable.setInput(valueExprFunc);
  290. updateFinishButton();
  291. }
  292. else if (se.widget == functionsSignaturesCombo) {
  293. String functionSelected = functionsList.getText();
  294. Object[][] formats = new Object[0][0];
  295. if (domainModel.getVendor().isDB2()) {
  296. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  297. formats = funcHelper.getFunctionSignatures(functionSelected);
  298. }
  299. else if (domainModel.getVendor().isOracle_V8()) {
  300. formats = OracleFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  301. }
  302. else if (domainModel.getVendor().isOracle_V9()) {
  303. formats = OracleV9FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  304. }
  305. else if (domainModel.getVendor().isMySQL()) {
  306. formats = MySQLFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  307. }
  308. else if (domainModel.getVendor().isSybase()) {
  309. formats = SybaseFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  310. }
  311. else if (domainModel.getVendor().isMSSQLServer()) {
  312. formats = MSSQLServerFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  313. }
  314. else if (domainModel.getVendor().isInformix()) {
  315. formats = InformixFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  316. }
  317. else if (domainModel.getVendor().isInstantDB()) {
  318. formats = InstantDBFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  319. }
  320. else if (domainModel.getVendor().isCloudscape()) {
  321. formats = CloudscapeFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  322. }
  323. else {
  324. formats = FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  325. }
  326. Object[] paramFormats = new Object[0];
  327. int index = functionsSignaturesCombo.getSelectionIndex();
  328. if (index >= 0 && index < formats.length) {
  329. paramFormats = formats[index];
  330. }
  331. //reset the number of parameters value
  332. numOfParameters = 0;
  333. for (int i = 1; i < paramFormats.length; i++) {
  334. if (paramFormats[i] != null)
  335. if (paramFormats[i].toString().length() > 0)
  336. numOfParameters++;
  337. }
  338. List paramsList = valueExprFunc.getParameterList();
  339. ArrayList tempList = new ArrayList();
  340. tempList.addAll(paramsList);
  341. int size = tempList.size();
  342. paramsList.clear();
  343. QueryValueExpression expr;
  344. for (int i = 0; i < numOfParameters; i++) {
  345. if (i < size && tempList.get(i) != null) {
  346. expr = (QueryValueExpression) tempList.get(i);
  347. }
  348. else {
  349. expr = ExpressionHelper.createExpression();
  350. }
  351. paramsList.add(expr);
  352. }
  353. paramTable.setInput(valueExprFunc);
  354. updateFinishButton();
  355. }
  356. }
  357. public QueryValueExpression getExpression() {
  358. return valueExprFunc;
  359. }
  360. public void setVisible(boolean visible) {
  361. super.setVisible(visible);
  362. if (visible) {
  363. fillFunctionCategoriesList();
  364. functionsCategoryCombo.select(0);
  365. functionsCategoryCombo.notifyListeners(SWT.Selection, new Event());
  366. functionsList.select(0);
  367. functionsList.notifyListeners(SWT.Selection, new Event());
  368. functionsSignaturesCombo.select(0);
  369. functionsSignaturesCombo.notifyListeners(SWT.Selection, new Event());
  370. if (valueExprFunc != null) {
  371. try {
  372. String functionName = valueExprFunc.getName();
  373. inputFunctionString = new String(functionName);
  374. int listIndex = functionsList.indexOf(functionName.toUpperCase());
  375. if (listIndex < 0) {
  376. listIndex = 0;
  377. }
  378. functionsList.select(listIndex);
  379. functionsList.notifyListeners(SWT.Selection, new Event());
  380. functionsSignaturesCombo.notifyListeners(SWT.Selection, new Event());
  381. int index = 0;
  382. if (numOfParameters > 0) {
  383. for (index = 0; index < functionsSignaturesCombo.getItemCount(); index++) {
  384. String testString = functionsSignaturesCombo.getItem(index);
  385. if (numOfParameters == 1) {
  386. if (testString.indexOf("(") >= 0) {
  387. String argString = testString.substring(testString.indexOf("(") + 1, testString.indexOf(")"));
  388. if (StringUtility.occurrenceOf(testString, ',') == 0 && argString.length() > 0) {
  389. break;
  390. }
  391. }
  392. }
  393. else if (numOfParameters > 1) {
  394. if (StringUtility.occurrenceOf(functionsSignaturesCombo.getItem(index), ',') == (numOfParameters - 1)) {
  395. break;
  396. }
  397. }
  398. }
  399. }
  400. else {
  401. index = 0;
  402. }
  403. functionsSignaturesCombo.select(index);
  404. paramTable.setInput(valueExprFunc);
  405. }
  406. catch (Exception e) {
  407. MessageDialog.openError(getShell(), Messages._ERROR_DIALOG_TITLE_EXPR_EDIT_FAILED,
  408. Messages._ERROR_DIALOG_MSG_REBUILD_EXPR);
  409. functionsCategoryCombo.notifyListeners(SWT.Selection, new Event());
  410. functionsList.notifyListeners(SWT.Selection, new Event());
  411. functionsSignaturesCombo.notifyListeners(SWT.Selection, new Event());
  412. }
  413. }
  414. updateFinishButton();
  415. }
  416. }
  417. public void updateFinishButton() {
  418. boolean isComplete = true;
  419. boolean isNotSupported = false;
  420. String functionSelected = functionsList.getText();
  421. Object[][] formats;
  422. if (domainModel.getVendor().isDB2()) {
  423. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  424. formats = funcHelper.getFunctionSignatures(functionSelected);
  425. }
  426. else if (domainModel.getVendor().isOracle_V8()) {
  427. formats = OracleFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  428. }
  429. else if (domainModel.getVendor().isOracle_V9()) {
  430. formats = OracleV9FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  431. }
  432. else if (domainModel.getVendor().isMySQL()) {
  433. formats = MySQLFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  434. isNotSupported = MySQLFunctionNamesAndSignatures.isNotSupported(functionSelected);
  435. }
  436. else if (domainModel.getVendor().isSybase()) {
  437. formats = SybaseFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  438. }
  439. else if (domainModel.getVendor().isMSSQLServer()) {
  440. formats = MSSQLServerFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  441. isNotSupported = MSSQLServerFunctionNamesAndSignatures.isNotSupported(functionSelected);
  442. }
  443. else if (domainModel.getVendor().isInformix()) {
  444. formats = InformixFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  445. isNotSupported = InformixFunctionNamesAndSignatures.isNotSupported(functionSelected);
  446. }
  447. else if (domainModel.getVendor().isInstantDB()) {
  448. formats = InstantDBFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  449. }
  450. else if (domainModel.getVendor().isCloudscape()) {
  451. formats = CloudscapeFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  452. isNotSupported = CloudscapeFunctionNamesAndSignatures.isNotSupported(functionSelected);
  453. }
  454. else {
  455. formats = FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  456. }
  457. Object[] paramFormats = new Object[0];
  458. int index = functionsSignaturesCombo.getSelectionIndex();
  459. if (index >= 0 && index < formats.length) {
  460. paramFormats = formats[index];
  461. }
  462. int noOfParameters = paramFormats.length - 1;
  463. QueryValueExpression expr;
  464. if (noOfParameters > 0) {
  465. List paramsList = valueExprFunc.getParameterList();
  466. for (int i = 0; i < paramsList.size(); i++) {
  467. expr = (QueryValueExpression) paramsList.get(i);
  468. if (expr instanceof ValueExpressionCombined) {
  469. ValueExpressionCombined combinedExpr = (ValueExpressionCombined) expr;
  470. isComplete = ExpressionHelper.isComplete(combinedExpr);
  471. }
  472. if (expr.getSQL().equals("")) {
  473. isComplete = false;
  474. }
  475. }
  476. }
  477. if (isNotSupported) {
  478. isComplete = false;
  479. previewExpressionText.setText("");
  480. }
  481. else {
  482. updatePreviewExpressionText();
  483. }
  484. setPageComplete(isComplete);
  485. if (getWizard() instanceof ExpressionBuilderWizard) {
  486. ExpressionBuilderWizard wiz = (ExpressionBuilderWizard) getWizard();
  487. wiz.setAllPagesComplete(isComplete);
  488. wiz.setAllPagesComplete(isComplete);
  489. }
  490. }
  491. public boolean performOk() {
  492. String functionSelected = functionsList.getText();
  493. Object[][] formats = new Object[0][0];
  494. if (domainModel.getVendor().isDB2()) {
  495. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  496. formats = funcHelper.getFunctionSignatures(functionSelected);
  497. }
  498. else if (domainModel.getVendor().isOracle_V8()) {
  499. formats = OracleFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  500. }
  501. else if (domainModel.getVendor().isOracle_V9()) {
  502. formats = OracleV9FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  503. }
  504. else if (domainModel.getVendor().isMySQL()) {
  505. formats = MySQLFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  506. }
  507. else if (domainModel.getVendor().isSybase()) {
  508. formats = SybaseFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  509. }
  510. else if (domainModel.getVendor().isMSSQLServer()) {
  511. formats = MSSQLServerFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  512. }
  513. else if (domainModel.getVendor().isInformix()) {
  514. formats = InformixFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  515. }
  516. else if (domainModel.getVendor().isInstantDB()) {
  517. formats = InstantDBFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  518. }
  519. else if (domainModel.getVendor().isCloudscape()) {
  520. formats = CloudscapeFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  521. }
  522. else {
  523. formats = FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  524. }
  525. Object[] paramFormats = new Object[0];
  526. int index = functionsSignaturesCombo.getSelectionIndex();
  527. if (index >= 0 && index < formats.length) {
  528. paramFormats = formats[index];
  529. }
  530. int noOfParams = paramFormats.length - 1;
  531. if (functionSelected.equals(inputFunctionString.toUpperCase())) {
  532. functionSelected = inputFunctionString;
  533. }
  534. ValueExpressionFunction updatedFunctionExpr = null;
  535. if (noOfParams > 0) {
  536. List params = ((ValueExpressionFunction) getExpression()).getParameterList();
  537. updatedFunctionExpr = ExpressionHelper.createFunction(functionSelected, params);
  538. }
  539. else {
  540. updatedFunctionExpr = ExpressionHelper.createFunction(functionSelected, null);
  541. if (domainModel.getVendor().isDB2()) {
  542. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  543. List specialRegNameList = funcHelper.getSpecialRegisterNames();
  544. if (specialRegNameList.contains(functionSelected)) {
  545. updatedFunctionExpr.setSpecialRegister(true);
  546. }
  547. }
  548. else if (domainModel.getVendor().isOracle_V8()) {
  549. if (OracleFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  550. updatedFunctionExpr.setSpecialRegister(true);
  551. }
  552. }
  553. else if (domainModel.getVendor().isOracle_V9()) {
  554. if (OracleV9FunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  555. updatedFunctionExpr.setSpecialRegister(true);
  556. }
  557. }
  558. else if (domainModel.getVendor().isMySQL()) {
  559. if (MySQLFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  560. updatedFunctionExpr.setSpecialRegister(true);
  561. }
  562. }
  563. else if (domainModel.getVendor().isMSSQLServer()) {
  564. if (MSSQLServerFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  565. updatedFunctionExpr.setSpecialRegister(true);
  566. }
  567. }
  568. else if (domainModel.getVendor().isInformix()) {
  569. if (InformixFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  570. updatedFunctionExpr.setSpecialRegister(true);
  571. }
  572. }
  573. else if (domainModel.getVendor().isCloudscape()) {
  574. if (CloudscapeFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  575. updatedFunctionExpr.setSpecialRegister(true);
  576. }
  577. }
  578. else {
  579. if (FunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  580. updatedFunctionExpr.setSpecialRegister(true);
  581. }
  582. }
  583. }
  584. if (getWizard() instanceof ExpressionBuilderWizard) {
  585. ExpressionBuilderWizard wiz = (ExpressionBuilderWizard) getWizard();
  586. wiz.setSQLExpression(updatedFunctionExpr);
  587. }
  588. else if (getWizard() instanceof FunctionExpressionWizard) {
  589. FunctionExpressionWizard wiz = (FunctionExpressionWizard) getWizard();
  590. wiz.setSQLExpression(updatedFunctionExpr);
  591. }
  592. return true;
  593. }
  594. private void fillFunctionCategoriesList() {
  595. functionsCategoryCombo.removeAll();
  596. if (domainModel.getVendor().isDB2()) {
  597. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  598. List catList = funcHelper.getFunctionCategories(FunctionHelper.ALL_LOCATION_TOP);
  599. for (int i=0; i<catList.size(); i++) {
  600. functionsCategoryCombo.add((String)catList.get(i));
  601. }
  602. }
  603. else if (domainModel.getVendor().isOracle_V8()) {
  604. OracleFunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  605. }
  606. else if (domainModel.getVendor().isOracle_V9()) {
  607. OracleV9FunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  608. }
  609. else if (domainModel.getVendor().isMySQL()) {
  610. MySQLFunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  611. }
  612. else if (domainModel.getVendor().isSybase()) {
  613. SybaseFunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  614. }
  615. else if (domainModel.getVendor().isMSSQLServer()) {
  616. MSSQLServerFunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  617. }
  618. else if (domainModel.getVendor().isInformix()) {
  619. InformixFunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  620. }
  621. else if (domainModel.getVendor().isInstantDB()) {
  622. InstantDBFunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  623. }
  624. else if (domainModel.getVendor().isCloudscape()) {
  625. CloudscapeFunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  626. }
  627. else {
  628. FunctionNamesAndSignatures.fillCategoryCombo(functionsCategoryCombo, isColumn);
  629. }
  630. }
  631. private void fillFunctionsList() {
  632. functionsList.removeAll();
  633. String category = functionsCategoryCombo.getText();
  634. if (domainModel.getVendor().isDB2()) {
  635. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  636. List funcList = funcHelper.getFunctionNames(category);
  637. for (int i = 0; i < funcList.size(); i++) {
  638. functionsList.add((String)funcList.get(i));
  639. }
  640. }
  641. else if (domainModel.getVendor().isOracle_V8()) {
  642. fillFunctionsListBox(OracleFunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  643. }
  644. else if (domainModel.getVendor().isOracle_V9()) {
  645. fillFunctionsListBox(OracleV9FunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  646. }
  647. else if (domainModel.getVendor().isMySQL()) {
  648. fillFunctionsListBox(MySQLFunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  649. }
  650. else if (domainModel.getVendor().isSybase()) {
  651. fillFunctionsListBox(SybaseFunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  652. }
  653. else if (domainModel.getVendor().isMSSQLServer()) {
  654. fillFunctionsListBox(MSSQLServerFunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  655. }
  656. else if (domainModel.getVendor().isInformix()) {
  657. fillFunctionsListBox(InformixFunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  658. }
  659. else if (domainModel.getVendor().isInstantDB()) {
  660. fillFunctionsListBox(InstantDBFunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  661. }
  662. else if (domainModel.getVendor().isCloudscape()) {
  663. fillFunctionsListBox(CloudscapeFunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  664. }
  665. else {
  666. fillFunctionsListBox(FunctionNamesAndSignatures.getFunctionList(category, isColumn, domainModel));
  667. }
  668. }
  669. private void fillFunctionsListBox(String[] arrayList) {
  670. for (int i = 0; i < arrayList.length; i++) {
  671. functionsList.add(arrayList[i]);
  672. }
  673. // hack : TRIM is only allowed on 390
  674. if (domainModel.getVendor().isDB2()) {
  675. if (!domainModel.getVendor().isDB2UDBOS390()) {
  676. if (functionsList.indexOf("TRIM") >= 0) {
  677. functionsList.remove("TRIM");
  678. }
  679. }
  680. }
  681. }
  682. private void populateFunctionsSignaturesCombo() {
  683. String functionSelected = functionsList.getText();
  684. Object[][] formats;
  685. boolean includeBrackets = true;
  686. String category = functionsCategoryCombo.getText();
  687. if (domainModel.getVendor().isDB2()) {
  688. if (category.equals(FunctionHelperDB2.CAT_LABEL_SPECIAL_REGISTERS)) {
  689. includeBrackets = false;
  690. }
  691. }
  692. else if (domainModel.getVendor().isOracle_V8()) {
  693. if (OracleFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  694. includeBrackets = false;
  695. }
  696. }
  697. else if (domainModel.getVendor().isOracle_V9()) {
  698. if (OracleV9FunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  699. includeBrackets = false;
  700. }
  701. }
  702. else if (domainModel.getVendor().isMySQL()) {
  703. if (MySQLFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  704. includeBrackets = false;
  705. }
  706. }
  707. else if (domainModel.getVendor().isMSSQLServer()) {
  708. if (MSSQLServerFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  709. includeBrackets = false;
  710. }
  711. }
  712. else if (domainModel.getVendor().isInformix()) {
  713. if (InformixFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  714. includeBrackets = false;
  715. }
  716. }
  717. else if (domainModel.getVendor().isCloudscape()) {
  718. if (CloudscapeFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  719. includeBrackets = false;
  720. }
  721. }
  722. else {
  723. if (FunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  724. includeBrackets = false;
  725. }
  726. }
  727. functionsSignaturesCombo.removeAll();
  728. if (domainModel.getVendor().isDB2()) {
  729. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  730. formats = funcHelper.getFunctionSignatures(functionSelected);
  731. }
  732. else if (domainModel.getVendor().isOracle_V8()) {
  733. formats = OracleFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  734. }
  735. else if (domainModel.getVendor().isOracle_V9()) {
  736. formats = OracleV9FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  737. }
  738. else if (domainModel.getVendor().isMySQL()) {
  739. formats = MySQLFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  740. }
  741. else if (domainModel.getVendor().isSybase()) {
  742. formats = SybaseFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  743. }
  744. else if (domainModel.getVendor().isMSSQLServer()) {
  745. formats = MSSQLServerFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  746. }
  747. else if (domainModel.getVendor().isInformix()) {
  748. formats = InformixFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  749. }
  750. else if (domainModel.getVendor().isInstantDB()) {
  751. formats = InstantDBFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  752. }
  753. else if (domainModel.getVendor().isCloudscape()) {
  754. formats = CloudscapeFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  755. }
  756. else {
  757. formats = FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  758. }
  759. for (int i = 0; i < formats.length; i++) {
  760. Object[] paramFormats = formats[i];
  761. String formatStr = "";
  762. if (includeBrackets) {
  763. formatStr = functionSelected + "(";
  764. }
  765. else {
  766. // hack. no bracket signature should be first
  767. if (i == 0) {
  768. formatStr = functionSelected;
  769. }
  770. else if (i > 0) {
  771. formatStr = functionSelected + "(";
  772. }
  773. }
  774. // Add the parameters
  775. for (int j = 1; j < paramFormats.length; j++) {
  776. if (j != 1) {
  777. formatStr += ", ";
  778. }
  779. if (paramFormats[j] != null) {
  780. formatStr += paramFormats[j].toString();
  781. }
  782. }
  783. if (includeBrackets) {
  784. formatStr += ") --> " + paramFormats[0].toString();
  785. }
  786. else {
  787. // hack. no bracket signature should be first
  788. if (i > 0) {
  789. formatStr += ")";
  790. }
  791. formatStr += " --> " + paramFormats[0].toString();
  792. }
  793. functionsSignaturesCombo.add(formatStr);
  794. }
  795. }
  796. public void updatePreviewExpressionText() {
  797. String formatString;
  798. String functionSelected = functionsList.getText();
  799. Object[][] formats;
  800. if (domainModel.getVendor().isDB2()) {
  801. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  802. formats = funcHelper.getFunctionSignatures(functionSelected);
  803. }
  804. else if (domainModel.getVendor().isOracle_V8()) {
  805. formats = OracleFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  806. }
  807. else if (domainModel.getVendor().isOracle_V9()) {
  808. formats = OracleV9FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  809. }
  810. else if (domainModel.getVendor().isMySQL()) {
  811. formats = MySQLFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  812. }
  813. else if (domainModel.getVendor().isSybase()) {
  814. formats = SybaseFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  815. }
  816. else if (domainModel.getVendor().isMSSQLServer()) {
  817. formats = MSSQLServerFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  818. }
  819. else if (domainModel.getVendor().isInformix()) {
  820. formats = InformixFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  821. }
  822. else if (domainModel.getVendor().isInstantDB()) {
  823. formats = InstantDBFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  824. }
  825. else if (domainModel.getVendor().isCloudscape()) {
  826. formats = CloudscapeFunctionNamesAndSignatures.getParameterFormats(functionSelected);
  827. }
  828. else {
  829. formats = FunctionNamesAndSignatures.getParameterFormats(functionSelected);
  830. }
  831. Object[] paramFormats = new Object[0];
  832. int index = functionsSignaturesCombo.getSelectionIndex();
  833. if (index >= 0 && index < formats.length) {
  834. paramFormats = formats[index];
  835. }
  836. int noOfParams = paramFormats.length - 1;
  837. QueryValueExpression param;
  838. formatString = functionSelected;
  839. if (noOfParams > 0) {
  840. List paramsList = valueExprFunc.getParameterList();
  841. int size = paramsList.size();
  842. formatString += "(";
  843. String exprSQL;
  844. for (int i = 0; i < size; i++) {
  845. param = (QueryValueExpression) paramsList.get(i);
  846. exprSQL = param.getSQL();
  847. formatString += exprSQL;
  848. if (i != size - 1) {
  849. formatString += ", ";
  850. }
  851. }
  852. formatString += ")";
  853. }
  854. else {
  855. if (domainModel.getVendor().isDB2()) {
  856. FunctionHelper funcHelper = FunctionHelper.getInstance(domainModel.getDatabase());
  857. List specialRegNameList = funcHelper.getSpecialRegisterNames();
  858. if (!specialRegNameList.contains(functionSelected)) {
  859. formatString += "()";
  860. }
  861. }
  862. else if (domainModel.getVendor().isOracle_V8()) {
  863. if (!OracleFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  864. formatString += "()";
  865. }
  866. }
  867. else if (domainModel.getVendor().isOracle_V9()) {
  868. if (!OracleV9FunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  869. formatString += "()";
  870. }
  871. }
  872. else if (domainModel.getVendor().isMySQL()) {
  873. if (!MySQLFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  874. formatString += "()";
  875. }
  876. }
  877. else if (domainModel.getVendor().isMSSQLServer()) {
  878. if (!MSSQLServerFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  879. formatString += "()";
  880. }
  881. }
  882. else if (domainModel.getVendor().isInformix()) {
  883. if (!InformixFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  884. formatString += "()";
  885. }
  886. }
  887. else if (domainModel.getVendor().isCloudscape()) {
  888. if (!CloudscapeFunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  889. formatString += "()";
  890. }
  891. }
  892. else {
  893. if (!FunctionNamesAndSignatures.requiresNoBrackets(functionSelected)) {
  894. formatString += "()";
  895. }
  896. }
  897. }
  898. previewExpressionText.setText(formatString);
  899. }
  900. public boolean currentPage() {
  901. return isCurrentPage();
  902. }
  903. }