private VdbEditor findEditorPart(final IWorkbenchPage page, IFile vdbFile) {
    // look through the open editors and see if there is one available for
    // this model file.
    final IEditorReference[] editors = page.getEditorReferences();
    for (int i = 0; i < editors.length; ++i) {

      final IEditorPart editor = editors[i].getEditor(false);
      if (editor instanceof VdbEditor) {
        final VdbEditor vdbEditor = (VdbEditor) editor;
        final IPath editorVdbPath = vdbEditor.getVdb().getName();
        if (vdbFile.getFullPath().equals(editorVdbPath)) return vdbEditor;
      }
    }

    return null;
  }
  @SuppressWarnings({"unchecked", "rawtypes"})
  private void createPanel(Composite parent) {
    final String DATA_POLICY_COLUMN_NAME = i18n("dataPolicyName"); // $NON-NLS-1$

    final ButtonProvider editProvider =
        new ButtonProvider() {
          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getImageDescriptor()
           */
          @Override
          public ImageDescriptor getImageDescriptor() {
            return VdbUiPlugin.singleton.getImageDescriptor(Images.EDIT_ROLE);
          }

          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getText()
           */
          @Override
          public String getText() {
            return null;
          }

          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getToolTip()
           */
          @Override
          public String getToolTip() {
            return i18n("editRoleToolTip"); // $NON-NLS-1$
          }

          /**
           * {@inheritDoc}
           *
           * @see
           *     org.teiid.designer.ui.common.widget.ButtonProvider#isEnabled(org.eclipse.jface.viewers.IStructuredSelection)
           */
          @Override
          public boolean isEnabled(IStructuredSelection selection) {
            return (selection.size() == 1);
          }

          /**
           * {@inheritDoc}
           *
           * @see
           *     org.teiid.designer.ui.common.widget.ButtonProvider#selected(org.eclipse.jface.viewers.IStructuredSelection)
           */
          @Override
          public void selected(IStructuredSelection selection) {
            DataRole dataRole = (DataRole) selection.getFirstElement();
            if (dataRole == null) {
              return;
            }
            ContainerImpl tempContainer = null;
            try {
              Collection<File> modelFiles = vdbEditor.getVdb().getModelFiles();

              tempContainer =
                  (ContainerImpl)
                      ModelerCore.createContainer("tempVdbModelContainer"); // $NON-NLS-1$
              ModelEditorImpl.setContainer(tempContainer);
              for (File modelFile : modelFiles) {
                boolean isVisible = true;

                Resource r =
                    tempContainer.getResource(URI.createFileURI(modelFile.getPath()), true);
                if (isVisible && ModelUtil.isModelFile(r) && !ModelUtil.isXsdFile(r)) {
                  EObject firstEObj = r.getContents().get(0);
                  ModelAnnotation ma = ModelerCore.getModelEditor().getModelAnnotation(firstEObj);
                  String mmURI = ma.getPrimaryMetamodelUri();
                  if (RelationalPackage.eNS_URI.equalsIgnoreCase(mmURI)
                      || XmlDocumentPackage.eNS_URI.equalsIgnoreCase(mmURI)
                      || WEB_SERVICES_VIEW_MODEL_URI.equalsIgnoreCase(mmURI)
                      || ModelIdentifier.FUNCTION_MODEL_URI.equals(mmURI)) {
                    // DO NOTHING. This leaves the resource in the temp container
                  } else {
                    tempContainer.getResources().remove(r);
                  }
                } else {
                  tempContainer.getResources().remove(r);
                }
              }
            } catch (CoreException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } finally {
              ModelEditorImpl.setContainer(null);
            }

            final IWorkbenchWindow iww = VdbUiPlugin.singleton.getCurrentWorkbenchWindow();
            Set<String> roleNames =
                VdbUtil.getDataRoleNames(vdbEditor.getVdb(), dataRole.getName());
            final DataRoleWizard wizard =
                new DataRoleWizard(
                    tempContainer, dataRole, vdbEditor.getVdb().getAllowedLanguages(), roleNames);

            wizard.init(
                iww.getWorkbench(), new StructuredSelection(vdbEditor.getVdb().getModelEntries()));
            final WizardDialog dialog = new WizardDialog(wizard.getShell(), wizard);
            final int rc = dialog.open();
            if (rc == Window.OK) {
              // Get the Data Policy
              DataRole dp = wizard.getFinalDataRole();
              if (dp != null) {
                if (vdbEditor.getVdb().getDataRoles().contains(dp)) {
                  dataRole.setName(dp.getName());
                  dataRole.setAnyAuthenticated(dp.isAnyAuthenticated());
                  dataRole.setAllowCreateTempTables(dp.isAllowCreateTempTables());
                  dataRole.setGrantAll(dp.isGrantAll());
                  dataRole.setDescription(dp.getDescription());
                  dataRole.setPermissions(dp.getPermissions());

                  Permission systemPerm = dataRole.getPermission(DataRole.SYS_ADMIN_TABLE_TARGET);
                  if (systemPerm != null) {
                    dataRole.addPermission(
                        new Permission(
                            DataRole.SYS_ADMIN_TABLE_TARGET,
                            false,
                            systemPerm.getCRUDValue(Type.READ).booleanValue(),
                            false,
                            false,
                            systemPerm.getCRUDValue(Type.EXECUTE).booleanValue(),
                            false));
                  }
                  if (!dataRole.isAnyAuthenticated() && !dp.getRoleNames().isEmpty()) {
                    dataRole.setRoleNames(dp.getRoleNames());
                  }

                  vdbEditor
                      .getVdb()
                      .setModified(this, Event.DATA_POLICY_REMOVED, dataRole, dataRole);
                  refresh();
                }
              }
            }
          }
        };

    dataRolesGroup =
        new TableAndToolBar(
            parent,
            1,
            new DefaultTableProvider<DataRole>() {
              /**
               * {@inheritDoc}
               *
               * @see
               *     org.teiid.designer.ui.common.table.DefaultTableProvider#doubleClicked(java.lang.Object)
               */
              @Override
              public void doubleClicked(DataRole element) {
                editProvider.selected(new StructuredSelection(element));
              }

              /**
               * {@inheritDoc}
               *
               * @see org.teiid.designer.ui.common.table.TableProvider#getElements()
               */
              @Override
              public DataRole[] getElements() {
                final Collection<DataRole> entries = vdbEditor.getVdb().getDataRoles();
                return entries.toArray(new DataRole[entries.size()]);
              }

              /**
               * {@inheritDoc}
               *
               * @see
               *     org.teiid.designer.ui.common.table.DefaultTableProvider#isDoubleClickSupported()
               */
              @Override
              public boolean isDoubleClickSupported() {
                return true;
              }
            },
            new TextColumnProvider<DataRole>() {
              /**
               * {@inheritDoc}
               *
               * @see
               *     org.teiid.designer.ui.common.table.DefaultColumnProvider#getImage(java.lang.Object)
               */
              @Override
              public Image getImage(final DataRole element) {
                return null;
              }

              /**
               * {@inheritDoc}
               *
               * @see org.teiid.designer.ui.common.table.ColumnProvider#getName()
               */
              @Override
              public String getName() {
                return DATA_POLICY_COLUMN_NAME;
              }

              /**
               * {@inheritDoc}
               *
               * @see org.teiid.designer.ui.common.table.ColumnProvider#getImage()
               */
              @Override
              public Image getImage() {
                return null;
              }

              /**
               * {@inheritDoc}
               *
               * @see org.teiid.designer.ui.common.table.ColumnProvider#getValue(java.lang.Object)
               */
              @Override
              public String getValue(final DataRole element) {
                return element.getName();
              }
            },
            new TextColumnProvider<DataRole>() {
              /**
               * {@inheritDoc}
               *
               * @see org.teiid.designer.ui.common.table.ColumnProvider#getName()
               */
              @Override
              public String getName() {
                return DESCRIPTION_COLUMN_NAME;
              }

              /**
               * {@inheritDoc}
               *
               * @see org.teiid.designer.ui.common.table.ColumnProvider#getImage()
               */
              @Override
              public Image getImage() {
                return null;
              }

              /**
               * {@inheritDoc}
               *
               * @see org.teiid.designer.ui.common.table.ColumnProvider#getValue(java.lang.Object)
               */
              @Override
              public String getValue(final DataRole element) {
                if (element.getDescription() == null) return StringConstants.EMPTY_STRING;
                return element.getDescription();
              }

              /**
               * {@inheritDoc}
               *
               * @see
               *     org.teiid.designer.ui.common.table.DefaultColumnProvider#isEditable(java.lang.Object)
               */
              @Override
              public boolean isEditable(final DataRole element) {
                return true;
              }

              /**
               * {@inheritDoc}
               *
               * @see
               *     org.teiid.designer.ui.common.table.DefaultColumnProvider#setValue(java.lang.Object,
               *     java.lang.Object)
               */
              @Override
              public void setValue(final DataRole element, final String value) {
                element.setDescription(value);
              }
            });

    ButtonProvider newProvider =
        new ButtonProvider() {
          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getImageDescriptor()
           */
          @Override
          public ImageDescriptor getImageDescriptor() {
            return VdbUiPlugin.singleton.getImageDescriptor(Images.ADD_ROLE);
          }

          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getText()
           */
          @Override
          public String getText() {
            return null;
          }

          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getToolTip()
           */
          @Override
          public String getToolTip() {
            return i18n("addRoleToolTip"); // $NON-NLS-1$
          }

          /**
           * {@inheritDoc}
           *
           * @see
           *     org.teiid.designer.ui.common.widget.ButtonProvider#isEnabled(org.eclipse.jface.viewers.IStructuredSelection)
           */
          @Override
          public boolean isEnabled(IStructuredSelection selection) {
            return true;
          }

          /**
           * {@inheritDoc}
           *
           * @see
           *     org.teiid.designer.ui.common.widget.ButtonProvider#selected(org.eclipse.jface.viewers.IStructuredSelection)
           */
          @Override
          public void selected(IStructuredSelection selection) {
            ContainerImpl tempContainer = null;
            try {
              Collection<File> modelFiles = vdbEditor.getVdb().getModelFiles();

              tempContainer =
                  (ContainerImpl)
                      ModelerCore.createContainer("tempVdbModelContainer"); // $NON-NLS-1$
              ModelEditorImpl.setContainer(tempContainer);
              for (File modelFile : modelFiles) {
                boolean isVisible = true;

                Resource r =
                    tempContainer.getResource(URI.createFileURI(modelFile.getPath()), true);
                if (isVisible && ModelUtil.isModelFile(r) && !ModelUtil.isXsdFile(r)) {
                  EObject firstEObj = r.getContents().get(0);
                  ModelAnnotation ma = ModelerCore.getModelEditor().getModelAnnotation(firstEObj);
                  String mmURI = ma.getPrimaryMetamodelUri();
                  if (RelationalPackage.eNS_URI.equalsIgnoreCase(mmURI)
                      || XmlDocumentPackage.eNS_URI.equalsIgnoreCase(mmURI)
                      || WEB_SERVICES_VIEW_MODEL_URI.equalsIgnoreCase(mmURI)
                      || ModelIdentifier.FUNCTION_MODEL_URI.equals(mmURI)) {
                    // DO NOTHING. This leaves the resource in the temp container
                  } else {
                    tempContainer.getResources().remove(r);
                  }
                } else {
                  tempContainer.getResources().remove(r);
                }
              }
            } catch (CoreException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            } finally {
              ModelEditorImpl.setContainer(null);
            }

            final IWorkbenchWindow iww = VdbUiPlugin.singleton.getCurrentWorkbenchWindow();
            Set<String> roleNames = VdbUtil.getDataRoleNames(vdbEditor.getVdb(), null);
            final DataRoleWizard wizard =
                new DataRoleWizard(
                    tempContainer, null, vdbEditor.getVdb().getAllowedLanguages(), roleNames);

            wizard.init(
                iww.getWorkbench(), new StructuredSelection(vdbEditor.getVdb().getModelEntries()));
            final WizardDialog dialog = new WizardDialog(wizard.getShell(), wizard);
            final int rc = dialog.open();
            if (rc == Window.OK) {
              // Get the Data Policy
              DataRole dp = wizard.getFinalDataRole();
              if (dp != null) {
                vdbEditor.getVdb().addDataRole(dp);
              }
            }
          }
        };

    dataRolesGroup.add(newProvider);
    dataRolesGroup.add(editProvider);

    ButtonProvider removeProvider =
        new ButtonProvider() {
          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getImageDescriptor()
           */
          @Override
          public ImageDescriptor getImageDescriptor() {
            return VdbUiPlugin.singleton.getImageDescriptor(Images.REMOVE_ROLE);
          }

          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getText()
           */
          @Override
          public String getText() {
            return null;
          }

          /**
           * {@inheritDoc}
           *
           * @see org.teiid.designer.ui.common.widget.ButtonProvider#getToolTip()
           */
          @Override
          public String getToolTip() {
            return i18n("removeRoleToolTip"); // $NON-NLS-1$
          }

          /**
           * {@inheritDoc}
           *
           * @see
           *     org.teiid.designer.ui.common.widget.ButtonProvider#isEnabled(org.eclipse.jface.viewers.IStructuredSelection)
           */
          @Override
          public boolean isEnabled(IStructuredSelection selection) {
            return !selection.isEmpty();
          }

          /**
           * {@inheritDoc}
           *
           * @see
           *     org.teiid.designer.ui.common.widget.ButtonProvider#selected(org.eclipse.jface.viewers.IStructuredSelection)
           */
          @Override
          public void selected(IStructuredSelection selection) {
            if (ConfirmationDialog.confirm(CONFIRM_REMOVE_MESSAGE)) {
              for (final Object element : selection.toList()) {
                if (element instanceof DataRole) {
                  vdbEditor.getVdb().removeDataRole(((DataRole) element).getName());
                }
              }
            }
          }
        };

    dataRolesGroup.add(removeProvider);
    dataRolesGroup.setInput(vdbEditor.getVdb());

    this.cloneDataRoleAction =
        new Action(i18n("cloneDataRoleActionLabel")) { // $NON-NLS-1$
          /**
           * {@inheritDoc}
           *
           * @see org.eclipse.jface.action.Action#run()
           */
          @Override
          public void run() {

            if (selectedDataRole != null) {
              DataRole newDR =
                  new DataRole(
                      selectedDataRole.getName()
                          + i18n("cloneDataRoleAction.copySuffix"), // $NON-NLS-1$
                      selectedDataRole.getDescription(),
                      selectedDataRole.isAnyAuthenticated(),
                      selectedDataRole.isAllowCreateTempTables(),
                      selectedDataRole.isGrantAll(),
                      selectedDataRole.getRoleNames(),
                      selectedDataRole.getPermissions());
              vdbEditor.getVdb().addDataRole(newDR);
              dataRolesGroup.getTable().getViewer().refresh();
            }
          }
        };

    this.cloneDataRoleAction.setEnabled(true);

    // Add selection changed listener so if a Physical Source model is selected, the applicable menu
    // actions are
    // retrieved via the SourceHandler extension point and interface.
    // This allows changing Translator and JNDI names via existing deployed objects on Teiid
    // Instances that are
    // connected in the user's workspace.
    final TableViewer dataRolesViewer = dataRolesGroup.getTable().getViewer();
    final MenuManager dataRolesMenuManager = new MenuManager();
    dataRolesViewer.getControl().setMenu(dataRolesMenuManager.createContextMenu(parent));
    dataRolesViewer.addSelectionChangedListener(
        new ISelectionChangedListener() {
          /**
           * {@inheritDoc}
           *
           * @see
           *     org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
           */
          @Override
          public void selectionChanged(final SelectionChangedEvent event) {
            dataRolesMenuManager.removeAll();
            IStructuredSelection sel = (IStructuredSelection) dataRolesViewer.getSelection();
            if (sel.size() == 1) {
              selectedDataRole = (DataRole) sel.getFirstElement();
              dataRolesMenuManager.add(cloneDataRoleAction);
            }
          }
        });
  }