如何在eclipse RCP中停止打开viewpart?

时间:2015-12-15 12:47:38

标签: java eclipse-plugin swt eclipse-rcp

我正在使用eclipse RCP。我在表格中有一个项目,当我双击该项目时,它会打开一个视图。如果用户无权访问该视图,则用户无法打开该视图。

所以我检查了该项目用户的访问权限,并关闭了透视图。

if (!user.hasReadAccess())
    final IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();

for (int w = 0; w < windows.length; w++)
{
    final IWorkbenchPage[] pages = windows[w].getPages();
    for (int p = 0; p < pages.length; p++)
    {
        final IWorkbenchPage page = pages[p];
        //  page.hideView(page.findView(MYViewID));
        final IViewReference[] viewRefs = page.getViewReferences();
        for (int v = 0; v < viewRefs.length; v++)
        {
            for (IPerspectiveDescriptor ipd : page.getOpenPerspectives())
            {
                if (ipd.getId().equalsIgnoreCase(PERSPECTIVE_ID))
                {

                    page.closePerspective(page.getPerspective(), true, true);
                    break;
                }
            }
        }
    }
}

它隐藏了透视图,但它始终打开透视图并立即关闭它。

换句话说,即使在调用closePerspective()之后,仍然会调用CreatePartControl的{​​{1}}方法,并且用户可以看到视图立即打开和关闭。是什么导致了这个问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

IWorkbenchPage上应该有一个用于打开视图的方法:

public IViewPart showView(String viewId, String secondaryId, int mode)
            throws PartInitException;

你应该在if条件中调用此方法

if ( userHasReadAccess ) {
    page.showView(viewId, secondaryId, IworkbenchPage.VIEW_ACTIVATE );
}