/* * 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.panels; import static org.teiid.designer.ui.PluginConstants.Prefs.General.AUTO_WILL_TOGGLE_WITH_CHILDREN; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.teiid.designer.roles.Crud; import org.teiid.designer.roles.Permission; import org.teiid.designer.roles.ui.Messages; import org.teiid.designer.roles.ui.wizard.DataRoleWizard; import org.teiid.designer.roles.ui.wizard.dialogs.ColumnMaskingDialog; import org.teiid.designer.roles.ui.wizard.dialogs.RowBasedSecurityDialog; import org.teiid.designer.ui.UiPlugin; /** * */ public class CrudPanel extends DataRolePanel { private TreeViewer treeViewer; /** * @param parent * @param wizard */ public CrudPanel(Composite parent, DataRoleWizard wizard) { super(parent, wizard); } /* (non-Javadoc) * @see org.teiid.designer.roles.ui.wizard.panels.DataRolePanel#createControl() */ @Override void createControl() { treeViewer = new TreeViewer(getPrimaryPanel(), SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); Tree tree = treeViewer.getTree(); final GridData gridData = new GridData(GridData.FILL_BOTH); gridData.grabExcessHorizontalSpace = true; treeViewer.getControl().setLayoutData(gridData); tree.addMouseListener(new MouseListener() { @Override public void mouseUp( MouseEvent e ) { // NO OP } @Override public void mouseDown( MouseEvent e ) { Point pt = new Point(e.x, e.y); if( treeViewer.getCell(pt) != null && treeViewer.getCell(pt).getViewerRow() != null && treeViewer.getCell(pt).getViewerRow().getItem() != null ) { handleSelection((treeViewer.getCell(pt).getColumnIndex()), treeViewer.getCell(pt).getViewerRow().getItem().getData()); } } @Override public void mouseDoubleClick( MouseEvent e ) { Point pt = new Point(e.x, e.y); if( treeViewer.getCell(pt) != null && treeViewer.getCell(pt).getViewerRow() != null && treeViewer.getCell(pt).getViewerRow().getItem() != null ) { handleDoubleClick((treeViewer.getCell(pt).getColumnIndex()), treeViewer.getCell(pt).getViewerRow().getItem().getData()); } } }); treeViewer.setUseHashlookup(true); /*** Tree table specific code starts ***/ tree.setHeaderVisible(true); tree.setLinesVisible(true); TreeColumn treeColumn = new TreeColumn(tree, SWT.LEFT); treeColumn.setText(Messages.model); TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); treeViewerColumn.getColumn().setText(Messages.security); treeViewerColumn.getColumn().setToolTipText(Messages.securityTooltip); treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.LEFT | SWT.CHECK); treeViewerColumn.getColumn().setText(Messages.create); treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.LEFT | SWT.CHECK); treeViewerColumn.getColumn().setText(Messages.read); treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.LEFT | SWT.CHECK); treeViewerColumn.getColumn().setText(Messages.update); treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.LEFT | SWT.CHECK); treeViewerColumn.getColumn().setText(Messages.delete); treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.LEFT | SWT.CHECK); treeViewerColumn.getColumn().setText(Messages.execute); treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.LEFT | SWT.CHECK); treeViewerColumn.getColumn().setText(Messages.alter); TableLayout layout = new TableLayout(); layout.addColumnData(new ColumnWeightData(60)); layout.addColumnData(new ColumnWeightData(10)); layout.addColumnData(new ColumnWeightData(10)); layout.addColumnData(new ColumnWeightData(8)); layout.addColumnData(new ColumnWeightData(10)); layout.addColumnData(new ColumnWeightData(10)); layout.addColumnData(new ColumnWeightData(11)); layout.addColumnData(new ColumnWeightData(8)); tree.setLayout(layout); treeViewer.setContentProvider(getTreeProvider()); treeViewer.setLabelProvider(getTreeProvider()); treeViewer.setInput(getWizard().getTempContainer()); } /* * This method tells the Tree Provider that */ private void handleSelection(int column, Object rowData) { if (column > 1) { Crud.Type crudType = Crud.getCrudType(column); // Determine any info or warning messages that should be issued before toggling boolean doToggle = true; IStatus toggleStatus = getTreeProvider().getToggleStatus(rowData, crudType); // If info is returned, the element cannot be toggled - display info dialog String autoToggle = UiPlugin.getDefault().getPreferenceStore().getString(AUTO_WILL_TOGGLE_WITH_CHILDREN); if( !MessageDialogWithToggle.ALWAYS.equals(autoToggle) ) { if (toggleStatus.getSeverity() == IStatus.INFO) { doToggle = false; MessageDialogWithToggle.openOkCancelConfirm( getShell(), Messages.state_change_info, toggleStatus.getMessage(), Messages.alwaysToggleAllChildrenMessage, false, UiPlugin.getDefault().getPreferenceStore(), AUTO_WILL_TOGGLE_WITH_CHILDREN); } else if (toggleStatus.getSeverity() == IStatus.WARNING) { MessageDialogWithToggle dialog = MessageDialogWithToggle.openOkCancelConfirm(getShell(), Messages.confirm_state_change, toggleStatus.getMessage(), Messages.alwaysToggleAllChildrenMessage, false, UiPlugin.getDefault().getPreferenceStore(), AUTO_WILL_TOGGLE_WITH_CHILDREN); doToggle = dialog.getReturnCode() == Window.OK; } } // Toggle the state if (doToggle) { getTreeProvider().togglePermission(rowData, crudType); } treeViewer.refresh(); validateInputs(); } } /* * This method tells the Tree Provider that */ private void handleDoubleClick(int column, Object target) { if (column == 1 ) { if( getTreeProvider().allowsRowFilter(target) ) { Permission perm = getTreeProvider().getPermission(target); boolean existingPerm = perm != null; if( perm == null ) { perm = getTreeProvider().createPermission(target); } String message = getTreeProvider().getSecurityDialogMessage(target); RowBasedSecurityDialog dialog = new RowBasedSecurityDialog(getShell(), Messages.setSecurityValuesTitle, message, perm, existingPerm); if( dialog.open() == Window.OK) { if( dialog.hasCondition()) { perm.setCondition(dialog.getCondition()); perm.setConstraint(dialog.getConstraintValue()); } getWizard().refreshAllTabs(); validateInputs(); } } else if( getTreeProvider().allowsColumnMask(target) ) { Permission perm = getTreeProvider().getPermission(target); boolean existingPerm = perm != null; if( perm == null ) { perm = getTreeProvider().createPermission(target); } String message = getTreeProvider().getSecurityDialogMessage(target); ColumnMaskingDialog dialog = new ColumnMaskingDialog(getShell(), Messages.setSecurityValuesTitle, message, perm, existingPerm); if( dialog.open() == Window.OK) { if( dialog.hasCondition()) { perm.setCondition(dialog.getCondition()); } if( dialog.hasMask()) { perm.setMask(dialog.getMask()); perm.setOrder(dialog.getOrder()); } getWizard().refreshAllTabs(); validateInputs(); } } } } @Override public void refresh() { treeViewer.refresh(); } }