codeOrchestra.lcs.config.view.LiveCodingProjectViews.java Source code

Java tutorial

Introduction

Here is the source code for codeOrchestra.lcs.config.view.LiveCodingProjectViews.java

Source

package codeOrchestra.lcs.config.view;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;

import codeOrchestra.lcs.ApplicationWorkbenchWindowAdvisor;
import codeOrchestra.lcs.license.DemoHelper;
import codeOrchestra.lcs.project.LCSProject;
import codeOrchestra.lcs.views.LiveCodingProjectPartView;

/**
 * @author Alexander Eliseyev
 */
public final class LiveCodingProjectViews {

    @SuppressWarnings("serial")
    private static Set<String> lcpViewIDs = new LinkedHashSet<String>() {
        {
            add("LCS.sourcesView");
            add("LCS.liveCodingView");
            add("LCS.compilerView");
        }
    };

    public static boolean isLiveCodingView(IViewReference viewReference) {
        return lcpViewIDs.contains(viewReference.getId());
    }

    @SuppressWarnings("unchecked")
    private static boolean validateProjectViewsState(IWorkbenchWindow window, LCSProject project) {
        List<String> errors = new ArrayList<String>();

        IViewReference[] viewReferences = window.getActivePage().getViewReferences();
        for (String viewId : lcpViewIDs) {
            for (int i = 0; i < viewReferences.length; i++) {
                if (viewReferences[i].getId().equals(viewId)) {
                    IViewPart view = viewReferences[i].getView(false);
                    if (view != null && view instanceof LiveCodingProjectPartView) {
                        @SuppressWarnings("rawtypes")
                        LiveCodingProjectPartView liveCodingProjectPartView = (LiveCodingProjectPartView) view;
                        errors.addAll(liveCodingProjectPartView.validate());
                    }
                }
            }
        }

        if (!errors.isEmpty()) {
            StringBuilder sb = new StringBuilder();
            for (String errorMessage : errors) {
                sb.append(errorMessage).append("\n");
            }

            MessageDialog.openError(window.getShell(), "Invalid settings",
                    "Can't save the project due to invalid settings:\n\n" + sb.toString());

            return false;
        }

        return true;
    }

    public static boolean saveProjectViewsState(IWorkbenchWindow window, LCSProject project) {
        if (!validateProjectViewsState(window, project)) {
            return false;
        }

        IViewReference[] viewReferences = window.getActivePage().getViewReferences();
        for (String viewId : lcpViewIDs) {
            for (int i = 0; i < viewReferences.length; i++) {
                if (viewReferences[i].getId().equals(viewId)) {
                    IViewPart view = viewReferences[i].getView(false);
                    if (view != null && view instanceof LiveCodingProjectPartView) {
                        @SuppressWarnings("rawtypes")
                        LiveCodingProjectPartView liveCodingProjectPartView = (LiveCodingProjectPartView) view;
                        liveCodingProjectPartView.savePart();
                    }
                }
            }
        }

        return true;
    }

    public static void openProjectViews(IWorkbenchWindow window, LCSProject project) throws PartInitException {
        boolean activated = false;
        for (String viewId : lcpViewIDs) {
            window.getActivePage().showView(viewId, project.getName(),
                    !activated ? IWorkbenchPage.VIEW_ACTIVATE : IWorkbenchPage.VIEW_CREATE);
            activated = true;
        }

        updateTitle();
    }

    public static void updateTitle() {
        LCSProject project = LCSProject.getCurrentProject();
        if (project != null && !project.isDisposed()) {
            ApplicationWorkbenchWindowAdvisor.sharedInstance.setTitle(
                    "Code Orchestra Livecoding Tool" + (DemoHelper.get().isInDemoMode() ? " (Demo Mode)" : "")
                            + " - " + project.getName() + " - " + project.getPath());
        } else {
            ApplicationWorkbenchWindowAdvisor.sharedInstance.setTitle(
                    "Code Orchestra Livecoding Tool" + (DemoHelper.get().isInDemoMode() ? " (Demo Mode)" : ""));
        }
    }

    public static boolean closeProjectViews() {
        if (ApplicationWorkbenchWindowAdvisor.sharedInstance == null) {
            return false;
        }

        updateTitle();

        IWorkbenchWindow activeWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        IWorkbenchPage page = activeWindow.getActivePage();
        if (page != null) {
            IViewReference[] viewReferences = page.getViewReferences();
            for (IViewReference ivr : viewReferences) {
                if (LiveCodingProjectViews.isLiveCodingView(ivr)) {
                    page.hideView(ivr);
                }
            }
        }

        return true;
    }

}