/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.roles.ui.wizard.dialogs; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.text.DocumentEvent; import org.eclipse.jface.text.IDocumentListener; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.core.designer.util.StringConstants; import org.teiid.designer.roles.Permission; import org.teiid.designer.roles.ui.Messages; import org.teiid.designer.ui.common.text.StyledTextEditor; import org.teiid.designer.ui.common.util.WidgetFactory; import org.teiid.designer.ui.common.widget.Label; public class ColumnMaskingDialog extends AbstractAddOrEditTitleDialog { private String targetName; private Text targetNameText; private StyledTextEditor conditionTextEditor; private String conditionString; private StyledTextEditor maskTextEditor; private String maskString; private int order = 0; private Text orderText; private boolean isEdit; /** * * @param parentShell * @param title * @param message * @param permission * @param okEnabled */ public ColumnMaskingDialog( Shell parentShell, String title, String message, Permission permission, boolean existingMask) { super(parentShell, Messages.columnMaskingDialogTitle, Messages.setConditionOrMaskingMessage, existingMask); this.targetName = permission.getTargetName(); isEdit = true; if( permission.getCondition() != null ) { this.conditionString = permission.getCondition(); } if(permission.getMask() != null ) { this.maskString = permission.getMask(); this.order = permission.getOrder(); } } /** * * @param outerPanel */ @Override public void createCustomArea( Composite outerPanel ) { final Composite innerPanel = new Composite(outerPanel, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(innerPanel); GridDataFactory.fillDefaults().grab(true, false).applyTo(innerPanel); { Label columnLabel = WidgetFactory.createLabel(innerPanel, Messages.column); GridDataFactory.swtDefaults().align(GridData.CENTER, GridData.CENTER).applyTo(columnLabel); this.targetNameText = WidgetFactory.createTextField(innerPanel, GridData.FILL_HORIZONTAL, 1, StringConstants.EMPTY_STRING); if( isEdit ) { this.targetNameText.setText(this.targetName); } this.targetNameText.addModifyListener(new ModifyListener() { @Override public void modifyText( ModifyEvent e ) { handleInputChanged(); } }); this.targetNameText.setEditable(false); this.targetNameText.setBackground(innerPanel.getBackground()); final Group group = WidgetFactory.createGroup(innerPanel, Messages.condition, GridData.FILL_HORIZONTAL, 2); { this.conditionTextEditor = new StyledTextEditor(group, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP | SWT.BORDER); GridDataFactory.fillDefaults().grab(true, true).span(2, 1).applyTo(this.conditionTextEditor.getTextWidget()); ((GridData)this.conditionTextEditor.getTextWidget().getLayoutData()).heightHint = 50; if( isEdit ) { this.conditionTextEditor.setText(this.conditionString); } else { this.conditionTextEditor.setText(""); //$NON-NLS-1$ } this.conditionTextEditor.getDocument().addDocumentListener(new IDocumentListener() { @Override public void documentChanged( DocumentEvent event ) { handleInputChanged(); } @Override public void documentAboutToBeChanged( DocumentEvent event ) { // NO OP } }); } WidgetFactory.createLabel(innerPanel, Messages.order); this.orderText = WidgetFactory.createTextField(innerPanel, GridData.FILL_HORIZONTAL, 1, StringConstants.EMPTY_STRING); if( isEdit ) { this.orderText.setText(Integer.toString(this.order)); } else { this.orderText.setText("0"); //$NON-NLS-1$ } this.orderText.addModifyListener(new ModifyListener() { @Override public void modifyText( ModifyEvent e ) { handleInputChanged(); } }); final Group maskGroup = WidgetFactory.createGroup(innerPanel, Messages.columnMasking, GridData.FILL_HORIZONTAL, 2); { this.maskTextEditor = new StyledTextEditor(maskGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP | SWT.BORDER); GridDataFactory.fillDefaults().grab(true, true).span(2, 1).applyTo(this.maskTextEditor.getTextWidget()); ((GridData)this.maskTextEditor.getTextWidget().getLayoutData()).heightHint = 50; if( isEdit ) { this.maskTextEditor.setText(this.maskString); } else { this.maskTextEditor.setText(""); //$NON-NLS-1$ } this.maskTextEditor.getDocument().addDocumentListener(new IDocumentListener() { @Override public void documentChanged( DocumentEvent event ) { handleInputChanged(); } @Override public void documentAboutToBeChanged( DocumentEvent event ) { // NO OP } }); } this.orderText.setEnabled(true); this.maskTextEditor.getTextWidget().setEnabled(true); } } /** * @return the new targetColumn value (never <code>null</code>) * @throws IllegalArgumentException if called when dialog return code is not {@link Window#OK}. */ public String getTargetName() { CoreArgCheck.isEqual(getReturnCode(), Window.OK); return this.targetName; } /** * @return the new condition value (never <code>null</code>) * @throws IllegalArgumentException if called when dialog return code is not {@link Window#OK}. */ public String getCondition() { CoreArgCheck.isEqual(getReturnCode(), Window.OK); return this.conditionString; } /** * @return the new mask value (never <code>null</code>) * @throws IllegalArgumentException if called when dialog return code is not {@link Window#OK}. */ public String getMask() { CoreArgCheck.isEqual(getReturnCode(), Window.OK); return this.maskString; } /** * @return the new order (never <code>null</code>) * @throws IllegalArgumentException if called when dialog return code is not {@link Window#OK}. */ public int getOrder() { CoreArgCheck.isEqual(getReturnCode(), Window.OK); return order; } @Override protected void handleInputChanged() { validate(); } /** * @return true if condition is not null and not empty */ public boolean hasCondition() { return getCondition() != null && !getCondition().isEmpty(); } /** * @return true if condition is not null and not empty */ public boolean hasMask() { return getMask() != null && !getMask().isEmpty(); } @Override protected void validate() { getButton(IDialogConstants.OK_ID).setEnabled(true); setErrorMessage(null); setMessage(Messages.clickOkToFinish); //Messages.clickOKToFinish); this.conditionString = conditionTextEditor.getText(); this.maskString = maskTextEditor.getText(); boolean conditionEmpty = (this.conditionString == null || this.conditionString.trim().isEmpty()); boolean maskEmpty = (maskString == null || maskString.trim().isEmpty()); if( maskEmpty && conditionEmpty) { setErrorMessage(Messages.noMaskOrConditionDefined); getButton(IDialogConstants.OK_ID).setEnabled(false); return; } if( this.orderText.getText() != null ) { try { order = Integer.parseInt(orderText.getText()); } catch (NumberFormatException ex) { setErrorMessage(Messages.orderMustBeAnInteger); getButton(IDialogConstants.OK_ID).setEnabled(false); return; } } else { setErrorMessage(Messages.orderMustNotBeNull); getButton(IDialogConstants.OK_ID).setEnabled(false); return; } // Assume that if order is > 0 (non-default), then the mask cannot be empty if( maskEmpty ) { getButton(IDialogConstants.OK_ID).setEnabled(false); return; } } }