// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dataprofiler.core.ui.views; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFolder; import org.eclipse.emf.common.util.EList; import org.eclipse.jface.action.Action; import org.eclipse.jface.commands.ActionHandler; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.contexts.IContextService; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; import org.talend.commons.emf.EMFUtil; import org.talend.commons.ui.runtime.exception.MessageBoxExceptionHandler; import org.talend.commons.utils.WorkspaceUtils; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.database.JavaSqlFactory; import org.talend.core.model.metadata.builder.database.dburl.SupportDBUrlType; import org.talend.core.model.properties.ConnectionItem; import org.talend.core.model.properties.Item; import org.talend.core.ui.CoreUIPlugin; import org.talend.cwm.db.connection.ConnectionUtils; import org.talend.dataprofiler.core.ImageLib; import org.talend.dataprofiler.core.PluginConstant; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.pattern.PatternLanguageType; import org.talend.dataprofiler.core.pattern.actions.CreatePatternAction; import org.talend.dataprofiler.core.ui.editor.pattern.PatternMasterDetailsPage; import org.talend.dataprofiler.core.ui.utils.CheckValueUtils; import org.talend.dataquality.analysis.ExecutionLanguage; import org.talend.dataquality.domain.pattern.ExpressionType; import org.talend.dataquality.domain.pattern.Pattern; import org.talend.dataquality.domain.pattern.PatternComponent; import org.talend.dataquality.domain.pattern.RegularExpression; import org.talend.dataquality.domain.pattern.impl.RegularExpressionImpl; import org.talend.dataquality.exception.DataprofilerCoreException; import org.talend.dataquality.helpers.BooleanExpressionHelper; import org.talend.dq.dbms.DbmsLanguage; import org.talend.dq.dbms.DbmsLanguageFactory; import org.talend.dq.helper.RepositoryNodeHelper; import org.talend.dq.helper.SqlExplorerUtils; import org.talend.dq.nodes.DBConnectionRepNode; import org.talend.repository.model.IRepositoryNode; import org.talend.resource.ResourceManager; import org.talend.utils.sugars.TypedReturnCode; /** * The View use to test the text whether match the specification regular text. */ public class PatternTestView extends ViewPart { private static final String NO_DATABASE_SELECTEDED = DefaultMessagesImpl.getString("PatternTestView.database"); //$NON-NLS-1$ public static final String ID = "org.talend.dataprofiler.core.ui.views.PatternTestView"; //$NON-NLS-1$ public static final String VIEW_CONTEXT_ID = "org.talend.dataprofiler.core.ui.views.PatternTestView.viewScope"; //$NON-NLS-1$ private static Logger log = Logger.getLogger(PatternTestView.class); private CCombo dbCombo; private static Text functionNameText; private Text testText, regularText; Button sqlButton, testButton; private Label textAreaLabel, regularLabel; Button buttonJava, buttonSql; Composite butPane; List<IRepositoryNode> listTdDataProviders = new ArrayList<IRepositoryNode>(); private Button saveButton; private Label emoticonLabel; private Label resultLabel; private Label functionLabel; private Pattern pattern; private Button createPatternButton; private RegularExpression regularExpression; private PatternMasterDetailsPage editorPage; private boolean isJavaEngine = false; private Composite imgCom; @Override public void createPartControl(final Composite parent) { // css CoreUIPlugin.setCSSClass(parent, this.getClass().getSimpleName()); createPatternTestCom(parent); } protected void createPatternTestCom(final Composite parent) { ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); final Composite mainComposite = new Composite(scrolledComposite, SWT.NULL); scrolledComposite.setContent(mainComposite); GridLayout blay = new GridLayout(); mainComposite.setLayout(blay); // create coboCom line final Composite coboCom = new Composite(mainComposite, SWT.NULL); imgCom = new Composite(mainComposite, SWT.NONE); final Composite textCom = new Composite(mainComposite, SWT.NULL); final Composite buttonsCom = new Composite(mainComposite, SWT.FILL | SWT.NULL); mainComposite.addListener(SWT.Resize, new Listener() { public void handleEvent(Event event) { GridData formData = new GridData(GridData.FILL_HORIZONTAL); formData.heightHint = 105; textCom.setLayoutData(formData); buttonsCom.setLayoutData(formData); } }); // ~ // set cobo com layout GridLayout layout = new GridLayout(); layout.numColumns = 3; coboCom.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); // MOD qiongli feature 16799: Add java in Pattern Test View buttonJava = new Button(coboCom, SWT.RADIO); buttonJava.setText(ExecutionLanguage.JAVA.getLiteral()); data = new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false); buttonJava.setLayoutData(data); buttonJava.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { isJavaEngine = true; sqlButton.setEnabled(false); dbCombo.setEnabled(false); functionNameText.setEnabled(false); } }); buttonSql = new Button(coboCom, SWT.RADIO); data = new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false); buttonSql.setText(DefaultMessagesImpl.getString("PatternTestView.Connections")); //$NON-NLS-1$ buttonSql.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { isJavaEngine = false; sqlButton.setEnabled(true); dbCombo.setEnabled(true); functionNameText.setEnabled(true); } }); buttonSql.setSelection(true); buttonSql.setEnabled(!isJavaEngine); buttonSql.setLayoutData(data); dbCombo = new CCombo(coboCom, SWT.DROP_DOWN | SWT.BORDER); dbCombo.setEditable(false); data = new GridData(GridData.FILL, GridData.BEGINNING, false, false); dbCombo.setLayoutData(data); // MOD gdbu 2011-5-31 bug : 19119 Label dummyLabel = new Label(coboCom, SWT.NONE); dummyLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false)); functionLabel = new Label(coboCom, SWT.NONE); functionLabel.setText(DefaultMessagesImpl.getString("PatternTestView.FunctionName"));//$NON-NLS-1$ functionNameText = new Text(coboCom, SWT.BORDER); functionNameText.setText(PluginConstant.EMPTY_STRING); GridData functionNameTextGD = new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false); data = new GridData(GridData.FILL, GridData.BEGINNING, false, false); functionNameText.setLayoutData(data); functionLabel.setLayoutData(functionNameTextGD); functionNameText.setVisible(false); functionLabel.setVisible(false); // ~19119 GridData comData = new GridData(GridData.FILL_HORIZONTAL); comData.heightHint = 50; coboCom.setLayoutData(comData); // create image com layout = new GridLayout(); layout.numColumns = 2; imgCom.setLayout(layout); emoticonLabel = new Label(imgCom, SWT.NONE); GridData gd = new GridData(); gd.heightHint = 18; gd.widthHint = 18; emoticonLabel.setLayoutData(gd); gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = 18; // gd.widthHint = 65; // MOD TDQ-4599,mzhao, don't truncate the label. gd.grabExcessHorizontalSpace = true; gd.horizontalAlignment = GridData.FILL; resultLabel = new Label(imgCom, SWT.NONE); resultLabel.setLayoutData(gd); GridData imgData = new GridData(GridData.FILL_HORIZONTAL); // imgData.heightHint = 0; imgData.horizontalAlignment = GridData.FILL; imgData.grabExcessHorizontalSpace = true; imgCom.setLayoutData(imgData); // ~ // create text com layout = new GridLayout(); layout.numColumns = 2; textCom.setLayout(layout); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalAlignment = GridData.BEGINNING; // MOD gdbu 2011-5-31 bug : 19119 textAreaLabel = new Label(textCom, SWT.NONE); textAreaLabel.setText(DefaultMessagesImpl.getString("PatternTestView.area")); //$NON-NLS-1$ testText = AutoScrollBarTextFactory.getDefault().createText(textCom, SWT.BORDER | SWT.MULTI | SWT.WRAP); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = 40; testText.setLayoutData(data); testText.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.enterHere")); //$NON-NLS-1$ GridData textAreaLabelGD = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); // textAreaLabelGD.widthHint = 180; textAreaLabel.setLayoutData(textAreaLabelGD); regularLabel = new Label(textCom, SWT.WRAP); regularLabel.setText(DefaultMessagesImpl.getString("PatternTestView.regularExpressionParameter")); //$NON-NLS-1$ regularLabel.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.regularExpressionParameter"));//$NON-NLS-1$ GridData regularLabelGD = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); regularLabelGD.heightHint = 40; regularLabelGD.widthHint = 70; // regularLabelGD.widthHint = 260; regularLabel.setLayoutData(regularLabelGD); // ~19119 this.regularText = AutoScrollBarTextFactory.getDefault().createText(textCom, SWT.BORDER | SWT.MULTI | SWT.WRAP); this.regularText.setLayoutData(data); regularText.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.enterHereAgainst")); //$NON-NLS-1$ regularText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { boolean enabled = (!regularText.getText().equals(PluginConstant.EMPTY_STRING)) && (CheckValueUtils.isPatternValue(regularText.getText())); if (pattern != null) { saveButton.setEnabled(enabled); } createPatternButton.setEnabled(enabled); } }); GridData textData = new GridData(GridData.FILL_BOTH); textData.heightHint = 400; textCom.setLayoutData(textData); // ~~~~~~ GridLayout llayout = new GridLayout(); llayout.numColumns = 4; buttonsCom.setLayout(llayout); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = 25; data.widthHint = 92; sqlButton = new Button(buttonsCom, SWT.PUSH); sqlButton.setText(DefaultMessagesImpl.getString("PatternTestView.SQL")); //$NON-NLS-1$ sqlButton.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.generatedSQLStatement")); //$NON-NLS-1$ sqlButton.setLayoutData(data); sqlButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { openSQLEditor(); } }); createPatternButton = new Button(buttonsCom, SWT.PUSH); createPatternButton.setText(DefaultMessagesImpl.getString("PatternTestView.createPattern")); //$NON-NLS-1$ createPatternButton.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.CreateNewPattern")); //$NON-NLS-1$ data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = 25; data.widthHint = 92; createPatternButton.setLayoutData(data); createPatternButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { String language = null; if (regularExpression != null) { language = regularExpression.getExpression().getLanguage(); } else { DbmsLanguage dbmsLanguage = getDbmsLanguage(); // MOD gdbu 2011-5-13 bug : 19119 if (dbmsLanguage != null) { dbmsLanguage.setRegularExpressionFunction(getFunctionName()); language = dbmsLanguage.getDbmsName(); } else { // ADD msjian 2012-2-10 TDQ-4600: fix set the default language is "Java" language = SupportDBUrlType.JAVADEFAULTURL.getDBKey(); // TDQ-4600~ } // ~19119 } // MOD mzhao 2009-03-13 Feature 6066 Move all folders into one // project. // MOD mzhao TDQ-4734 set relative customer pattern folder, same level to the pattern to be replicated. IFolder customizedPattFolder = ResourceManager.getPatternRegexFolder(); if (pattern != null && pattern.eResource() != null) { IContainer oriPattContainer = WorkspaceUtils.getModelElementResource(pattern).getParent(); if (oriPattContainer instanceof IFolder) { customizedPattFolder = (IFolder) oriPattContainer; } } new CreatePatternAction(customizedPattFolder, ExpressionType.REGEXP, regularText.getText(), language).run(); } }); createPatternButton.setEnabled(false); saveButton = new Button(buttonsCom, SWT.PUSH); saveButton.setText(DefaultMessagesImpl.getString("PatternTestView.Save")); //$NON-NLS-1$ saveButton.setEnabled(false); saveButton.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.SaveRegularExpression")); //$NON-NLS-1$ data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = 25; data.widthHint = 92; saveButton.setLayoutData(data); saveButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { savePattern(); } }); testButton = new Button(buttonsCom, SWT.PUSH); data = new GridData(GridData.FILL_HORIZONTAL); testButton.setLayoutData(data); testButton.setText(DefaultMessagesImpl.getString("PatternTestView.test")); //$NON-NLS-1$ testButton.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.ValidateEnteredString")); //$NON-NLS-1$ testButton.setLayoutData(data); testButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { testRegularText(); } }); // MOD gdbu TDQ-4153 2011-12-19 Initialize the position error of composite. expandImageComposite(); // ~TDQ-4153 data = new GridData(GridData.FILL_HORIZONTAL); buttonsCom.setLayoutData(data); scrolledComposite.setMinSize(mainComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); mainComposite.layout(); activateContext(); // MOD gdbu 2011-5-31 bug : 19119 fillComboData(); // ~19119 } /** * DOC klliu Comment method "expandImageComposite". * * @param expand */ protected void expandImageComposite() { imgCom.getParent().layout(); } /** * Activate a context that this view uses. It will be tied to this view activation events and will be removed when * the view is disposed. */ private void activateContext() { IContextService contextService = (IContextService) getSite().getService(IContextService.class); contextService.activateContext(VIEW_CONTEXT_ID); TestRegularAction testRegularAction = new TestRegularAction(); IHandlerService service = (IHandlerService) getViewSite().getService(IHandlerService.class); service.activateHandler(testRegularAction.getActionDefinitionId(), new ActionHandler(testRegularAction)); } /** * DOC rli PatternTestView class global comment. Detailled comment */ public class TestRegularAction extends Action { public TestRegularAction() { this.setActionDefinitionId("org.talend.dataprofiler.core.testRegular"); //$NON-NLS-1$ } @Override public void run() { testRegularText(); } } /** * Test the text by the regular text of regularText. */ private void testRegularText() { // MOD qiongli 2011-1-7.Add java in Pattern Test View if (isJavaEngine) { String regexStr = regularText.getText(); if (regexStr.length() >= 2 && regexStr.startsWith("'") && regexStr.endsWith("'")) { //$NON-NLS-1$ //$NON-NLS-2$ regexStr = regexStr.substring(1, regexStr.length() - 1); } try { boolean flag = java.util.regex.Pattern.compile(regexStr).matcher(testText.getText()).find(); if (flag) { emoticonLabel.setImage(ImageLib.getImage(ImageLib.CHECK_MARK_PNG)); resultLabel.setText(DefaultMessagesImpl.getString("PatternTestView.Match")); //$NON-NLS-1$ return; } else { emoticonLabel.setImage(ImageLib.getImage(ImageLib.RED_WARNING_PNG)); resultLabel.setText(DefaultMessagesImpl.getString("PatternTestView.nonMatch")); //$NON-NLS-1$ return; } } catch (java.util.regex.PatternSyntaxException e) {// TDQ-5650 show the error message if any exception emoticonLabel.setImage(ImageLib.getImage(ImageLib.ICON_ERROR_INFO)); resultLabel.setText(e.getLocalizedMessage()); return; } } else { for (IRepositoryNode connRepNode : listTdDataProviders) { ConnectionItem connItem = (ConnectionItem) connRepNode.getObject().getProperty().getItem(); Connection tddataprovider = connItem.getConnection(); if (tddataprovider.getName().equals(dbCombo.getText())) { DbmsLanguage createDbmsLanguage = DbmsLanguageFactory.createDbmsLanguage(tddataprovider); String selectRegexpTestString = null; // MOD gdbu 2011-5-31 bug : 19119 if (null != createDbmsLanguage) { createDbmsLanguage.setRegularExpressionFunction(getFunctionName()); selectRegexpTestString = createDbmsLanguage.getSelectRegexpTestString(testText.getText(), regularText.getText()); } // ~19119 // TDQ-8637 if the 'selectRegexpTestString' is null,means doesn't implement method // DbmsLanguage.regexLike().should return. if (selectRegexpTestString == null) { MessageDialog.openInformation(new Shell(), DefaultMessagesImpl.getString("PatternTestView.NoSupportTitle"), //$NON-NLS-1$ DefaultMessagesImpl.getString("PatternTestView.NoSupportPatternTest")); //$NON-NLS-1$ return; } TypedReturnCode<java.sql.Connection> rcConn = JavaSqlFactory.createConnection(tddataprovider); Statement createStatement = null; try { if (!rcConn.isOk()) { throw new DataprofilerCoreException(rcConn.getMessage()); } java.sql.Connection connection = rcConn.getObject(); createStatement = connection.createStatement(); ResultSet resultSet = createStatement.executeQuery(selectRegexpTestString); while (resultSet.next()) { String okString = resultSet.getString(1); // MOD msjian 2011-11-15 TDQ-3967: in the postgres db, the match return value is "t" if ("1".equalsIgnoreCase(okString) //$NON-NLS-1$ || (createDbmsLanguage != null && (createDbmsLanguage.getDbmsName().equals( SupportDBUrlType.POSTGRESQLEFAULTURL.getLanguage()) && "t".equalsIgnoreCase(okString)))) { //$NON-NLS-1$ // TDQ-3967 ~ emoticonLabel.setImage(ImageLib.getImage(ImageLib.CHECK_MARK_PNG)); resultLabel.setText(DefaultMessagesImpl.getString("PatternTestView.Match")); //$NON-NLS-1$ return; } } emoticonLabel.setImage(ImageLib.getImage(ImageLib.RED_WARNING_PNG)); resultLabel.setText(DefaultMessagesImpl.getString("PatternTestView.nonMatch")); //$NON-NLS-1$ return; } catch (Exception exception) { log.error(exception, exception); // bug TDQ-2066-->TDQ-3594 for mysql Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); MessageBoxExceptionHandler.process(exception, shell); // ~ emoticonLabel.setImage(null); return; } finally { if (createStatement != null) { try { createStatement.close(); } catch (SQLException e) { // do nothing until now } } ConnectionUtils.closeConnection(rcConn.getObject()); } } } } MessageDialog.openWarning(new Shell(), "", NO_DATABASE_SELECTEDED); //$NON-NLS-1$ } /** * Set the pattern and regularExpression value to the corresponding field, it can be called after the control * created. * * @param pattern * @param regularExpression */ public void setPatternExpression(PatternMasterDetailsPage editorPage, Pattern editorPattern, RegularExpression regularExpression) { this.editorPage = editorPage; pattern = editorPattern; this.regularExpression = regularExpression; String body = regularExpression.getExpression().getBody(); this.regularText.setText(body == null ? "" : body); //$NON-NLS-1$ this.saveButton.setEnabled(true); this.createPatternButton.setEnabled(true); if (regularExpression != null) { String language = regularExpression.getExpression().getLanguage(); isJavaEngine = StringUtils.equalsIgnoreCase(language, PatternLanguageType.JAVA.getName()); buttonJava.setSelection(isJavaEngine); buttonSql.setEnabled(!isJavaEngine); buttonSql.setSelection(!isJavaEngine); dbCombo.setEnabled(buttonSql.getSelection()); } } public String getRegularText() { return this.regularText.getText(); } @Override public void setFocus() { } /** * DOC rli Comment method "openSQLEditor". */ private void openSQLEditor() { DbmsLanguage dbmsLanguage = this.getDbmsLanguage(); if (dbmsLanguage != null) { // MOD gdbu 2011-6-13 bug : 19119 dbmsLanguage.setRegularExpressionFunction(getFunctionName()); // ~19119 String selectRegexpTestString = dbmsLanguage.getSelectRegexpTestString(testText.getText(), regularText.getText()); // MOD sizhaoliu TDQ-5237 changed the way to open SQL Explorer for Pattern Test View SqlExplorerUtils.getDefault().runInDQViewer(getDBConnectionFromDBName(dbCombo.getText()), selectRegexpTestString, SqlExplorerUtils.SQLEDITOR_ID); } else { MessageDialog.openWarning(new Shell(), "", NO_DATABASE_SELECTEDED); //$NON-NLS-1$ } } /** * If the pattern is not null, will save it and update the corresponding pattern editor content. */ private void savePattern() { // If the pattern is not null, will update the pattern editor content. if (pattern != null) { String expressionLanguage = this.regularExpression.getExpression().getLanguage(); DbmsLanguage dbmsLanguage = this.getDbmsLanguage(); // MOD gdbu 2011-5-31 bug : 19119 // MOD gdbu 2011-6-13 bug : 21695 if (null != dbmsLanguage) { dbmsLanguage.setRegularExpressionFunction(getFunctionName()); } // ~21695 // ~19119 // MOD qiongli 2011-1-7 featrue 16799. boolean isLanguageMatched = false; if (isJavaEngine && expressionLanguage.equals(ExecutionLanguage.JAVA.getLiteral()) || dbmsLanguage != null && (dbmsLanguage.getDbmsName().equalsIgnoreCase(expressionLanguage))) { isLanguageMatched = true; } if (!isLanguageMatched) { String messageInfo = DefaultMessagesImpl .getString( "PatternTestView.modifiedTheRegularExpression", expressionLanguage, dbmsLanguage.getDbmsName(), expressionLanguage, expressionLanguage, dbmsLanguage.getDbmsName()); //$NON-NLS-1$ MessageDialog messageDialog = new MessageDialog(new Shell(), DefaultMessagesImpl.getString("PatternTestView.warning"), null, messageInfo, MessageDialog.WARNING, //$NON-NLS-1$ new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, 0); int result = messageDialog.open(); if (result == MessageDialog.OK) { regularExpression.getExpression().setBody(regularText.getText()); } else { EList<PatternComponent> components = this.pattern.getComponents(); boolean isContainLanguage = false; for (int i = 0; i < components.size(); i++) { RegularExpressionImpl regularExpress = (RegularExpressionImpl) components.get(i); // set the regular text to the corresponding regular // expression if (dbmsLanguage.getDbmsName().equalsIgnoreCase(regularExpress.getExpression().getLanguage())) { regularExpress.getExpression().setBody(regularText.getText()); isContainLanguage = true; break; } } // Not find the corresponding regular expression, will new a // expression. if (!isContainLanguage) { RegularExpression newRegularExpress = BooleanExpressionHelper.createRegularExpression( dbmsLanguage.getDbmsName(), regularText.getText()); this.pattern.getComponents().add(newRegularExpress); } } } else { regularExpression.getExpression().setBody(regularText.getText()); } EMFUtil.saveSingleResource(pattern.eResource()); editorPage.updatePatternDefinitonSection(); // MessageDialog.openInformation(new Shell(), "Success", // "Success to save the pattern '" + // pattern.getName() // + "'"); saveButton.setEnabled(false); } } /** * DOC rli Comment method "getDbmsLanguage". * * @param language * @return */ private DbmsLanguage getDbmsLanguage() { // MOD qiongli 2011-1-7 if (isJavaEngine) { return null; } for (IRepositoryNode connRepNode : listTdDataProviders) { ConnectionItem connItem = (ConnectionItem) connRepNode.getObject().getProperty().getItem(); Connection tddataprovider = connItem.getConnection(); if (tddataprovider.getName().equals(dbCombo.getText())) { return DbmsLanguageFactory.createDbmsLanguage(tddataprovider); } } return null; } /** * MOD gdbu 2011-5-31 bug : 19119 * * DOC gdbu Comment method "fillComboData". * * In this method, we have done several things , e.g. 1:get the combo's data , and then set those data in combo. * 2:according to the value of combo(dbCombo.getText()) to determine if display the * functionInfo(functionText,functionLabel). 3:add SelectionListener to combo. * */ private void fillComboData() { listTdDataProviders = RepositoryNodeHelper.getDBConnectionRepositoryNodes(true); List<String> items = new ArrayList<String>(); for (IRepositoryNode tdDataProvider : listTdDataProviders) { // MOD msjian TDQ-6186 2012-10-12: hiden the Hive database if (tdDataProvider instanceof DBConnectionRepNode) { String dbType = ((DBConnectionRepNode) tdDataProvider).getDatabaseConnection().getDatabaseType(); if (!dbType.equals(SupportDBUrlType.HIVEDEFAULTURL.getLanguage())) { items.add(tdDataProvider.getLabel()); } } // TDQ-6186~ } if (!items.isEmpty()) { dbCombo.setItems(items.toArray(new String[0])); if (dbCombo.getText().equals(PluginConstant.EMPTY_STRING)) { dbCombo.setText(items.get(0)); } if (!dbCombo.getText().equals(PluginConstant.EMPTY_STRING)) { Connection dbConnectionName = getDBConnectionFromDBName(dbCombo.getText()); if (dbConnectionName != null) { setFunctionTextVisibleFromDBCOnn(dbConnectionName); } } } createDBComboListener(); } /** * MOD gdbu 2011-5-31 bug : 19119 * * DOC gdbu Comment method "createDBComboListiner". * * used to add dbCombo's Selectionlistener. */ private void createDBComboListener() { dbCombo.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } public void widgetSelected(SelectionEvent arg0) { for (IRepositoryNode node : listTdDataProviders) { Item item = node.getObject().getProperty().getItem(); if (item instanceof ConnectionItem) { setFunctionTextVisibleFromDBCOnn(((ConnectionItem) item).getConnection()); } } } }); } /** * MOD gdbu 2011-5-31 bug : 19119 * * DOC gdbu Comment method "setFunctionTextVisibleFromDBCOnn". * * @param tdDataProvider */ private void setFunctionTextVisibleFromDBCOnn(Connection tdDataProvider) { if (tdDataProvider.getName().equals(dbCombo.getText())) { DbmsLanguage dbmsLanguage = DbmsLanguageFactory.createDbmsLanguage(tdDataProvider); if (dbmsLanguage.regexLike(testText.getText(), regularText.getText()) == null) { setFunctionInfoVisible(true); } else { setFunctionInfoVisible(false); } } } /** * MOD gdbu 2011-5-31 bug : 19119 * * DOC gdbu Comment method "setFunctionInfoVisible". * * used to set functionLabel(Label) and functionName(Text)'s visible. * * @param visible */ private void setFunctionInfoVisible(boolean visible) { functionLabel.setVisible(visible); functionNameText.setVisible(visible); if (visible) { textAreaLabel.setText(DefaultMessagesImpl.getString("PatternTestView.areaParameterOne")); //$NON-NLS-1$ textAreaLabel.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.areaParameterOne"));//$NON-NLS-1$ regularLabel.setText(DefaultMessagesImpl.getString("PatternTestView.regularExpressionParameter")); //$NON-NLS-1$ regularLabel.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.regularExpressionParameterTwo")); //$NON-NLS-1$ } else { textAreaLabel.setText(DefaultMessagesImpl.getString("PatternTestView.area")); //$NON-NLS-1$ textAreaLabel.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.area")); //$NON-NLS-1$ regularLabel.setText(DefaultMessagesImpl.getString("PatternTestView.regularExpressionParameter")); //$NON-NLS-1$ regularLabel.setToolTipText(DefaultMessagesImpl.getString("PatternTestView.regularExpressionParameter"));//$NON-NLS-1$ } GridData formData = new GridData(GridData.FILL_HORIZONTAL); formData.widthHint = 37; functionNameText.getParent().layout(); } /** * MOD gdbu 2011-5-31 bug : 19119 * * DOC gdbu Comment method "getDBConnectionFromDBName". * * @param dbName * @return */ private Connection getDBConnectionFromDBName(String dbName) { for (IRepositoryNode node : listTdDataProviders) { if (node.getLabel().equals(dbName)) { Item item = node.getObject().getProperty().getItem(); if (item instanceof ConnectionItem) { return ((ConnectionItem) item).getConnection(); } } } return null; } /** * DOC gdbu Comment method "getFunctionName". * * @return */ public static String getFunctionName() { return functionNameText.getText(); } }