org.eclipse.titan.log.viewer.utils.ActionUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.titan.log.viewer.utils.ActionUtils.java

Source

/******************************************************************************
 * Copyright (c) 2000-2016 Ericsson Telecom AB
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 ******************************************************************************/
package org.eclipse.titan.log.viewer.utils;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.CommonViewer;

import org.eclipse.titan.common.logging.ErrorReporter;
import org.eclipse.titan.log.viewer.models.LogFileMetaData;
import org.eclipse.titan.log.viewer.views.DetailsView;
import org.eclipse.titan.log.viewer.views.ILogViewerView;

/**
 * Help class to navigator actions
 */
public final class ActionUtils {

    private ActionUtils() {
        // Hide constructor
    }

    /**
     * Closes all MSC and Text Table views connected to a project, a file or a folder that will be closed or deleted
     * and clear the tabbed navigator if necessary
     * @param activePage activePage page
     * @param viewReferences views
     * @param resource object
     */
    public static void closeAssociatedViews(final IWorkbenchPage activePage, final IViewReference[] viewReferences,
            final IResource resource) {
        switch (resource.getType()) {
        case IResource.PROJECT:
            closeViewsForProject((IProject) resource, activePage, viewReferences);
            break;
        case IResource.FILE:
            closeViewsForFiles((IFile) resource, activePage, viewReferences);
            break;
        case IResource.FOLDER:
            closeViewsInclInFolder((IFolder) resource, activePage, viewReferences);
            break;
        default:
            break;
        }
    }

    /**
     * Updates the log file and it's children in the project explorer view. It should be used when the test cases
     * of the log file or the log file has changed. For example when the test case extraction is done.
     * @param logFile
     */
    public static void refreshLogFileInProjectsViewer(final IFile logFile) {
        Display.getDefault().asyncExec(new Runnable() {
            @Override
            public void run() {
                final IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
                        .getActivePage();
                IViewPart view = activePage.findView("org.eclipse.ui.navigator.ProjectExplorer");

                if (view instanceof CommonNavigator) {
                    CommonViewer viewer = ((CommonNavigator) view).getCommonViewer();
                    viewer.refresh(logFile, true);
                    viewer.expandToLevel(logFile, AbstractTreeViewer.ALL_LEVELS);
                }
            }
        });
    }

    /**
     * Closes all connected views when closing/deleting a project
     * and clear the test case tabbed navigator if necessary
     * @param project  the selected project
     * @param activePage activePage page
     * @param viewReferences views
     */
    private static void closeViewsForProject(final IProject project, final IWorkbenchPage activePage,
            final IViewReference[] viewReferences) {
        for (IViewReference reference : viewReferences) {
            IViewPart view = reference.getView(false);
            closeView(project, activePage, reference, view);
        }
    }

    private static void closeView(IProject project, IWorkbenchPage activePage, IViewReference reference,
            IViewPart view) {
        //    a restored view with faulty content
        if (view == null) {
            activePage.hideView(reference);
            return;
        }

        if (!(view instanceof ILogViewerView)) {
            return;
        }

        final ILogViewerView logViewerView = (ILogViewerView) view;
        final LogFileMetaData metaData = logViewerView.getLogFileMetaData();
        if (metaData == null) {
            activePage.hideView(reference);
            return;
        }

        if (project.getName().equals(metaData.getProjectName())) {
            activePage.hideView(reference);
        }
    }

    /**
     * Closes all connected views when closing/deleting a file
     * and clear the test case tabbed navigator if necessary
     * All used cache files are deleted also from the file system.
     * @param file  the selected file
     * @param activePage activePage page
     * @param viewReferences views
     */
    private static void closeViewsForFiles(final IFile file, final IWorkbenchPage activePage,
            final IViewReference[] viewReferences) {

        for (IViewReference reference : viewReferences) {
            closeView(file, activePage, reference);
        }

        LogFileCacheHandler.clearCache(file);
    }

    private static void closeView(IFile file, IWorkbenchPage activePage, IViewReference reference) {
        IViewPart view = reference.getView(false);

        // a restored view with faulty content
        if (view == null) {
            activePage.hideView(reference);
            return;
        }

        if (!(view instanceof ILogViewerView)) {
            return;
        }

        final ILogViewerView logViewerView = (ILogViewerView) view;
        final LogFileMetaData metadata = logViewerView.getLogFileMetaData();
        if (metadata == null) {
            activePage.hideView(reference);
            return;
        }

        if (file.getLocationURI().equals(metadata.getFilePath())) {
            if (logViewerView instanceof DetailsView) {
                ((DetailsView) logViewerView).setData(null, false);
            }
            activePage.hideView(reference);
        }
    }

    /**
     * Closes all connected views when closing/deleting a folder
     * and clear the test case tabbed navigator if necessary
     * All files or folders inside the selected folder closes to.
     * All used cache files are deleted also from the file system.
     * @param folder  the selected folder
     * @param activePage activePage page
     * @param viewReferences views
     */
    private static void closeViewsInclInFolder(final IFolder folder, final IWorkbenchPage activePage,
            final IViewReference[] viewReferences) {
        if (folder.isAccessible()) {
            try {
                IResource[] resource = folder.members();

                closeViewsOfLogFiles(activePage, viewReferences, resource);
            } catch (CoreException e) {
                ErrorReporter.logExceptionStackTrace(e);
            }
        }

        LogFileCacheHandler.clearLogFolderCache(folder);
    }

    private static void closeViewsOfLogFiles(IWorkbenchPage activePage, IViewReference[] viewReferences,
            IResource[] resource) {
        for (IResource aResource : resource) {
            if (aResource instanceof IFile) {
                closeViewsForFiles((IFile) aResource, activePage, viewReferences);
            } else if (aResource instanceof IFolder) {
                closeViewsInclInFolder((IFolder) aResource, activePage, viewReferences);
            }
        }
    }

}