ca.mcgill.cs.swevo.qualyzer.ui.ResourcesUtil.java Source code

Java tutorial

Introduction

Here is the source code for ca.mcgill.cs.swevo.qualyzer.ui.ResourcesUtil.java

Source

/*******************************************************************************
 * Copyright (c) 2010 McGill University
 * 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
 *
 * Contributors:
 *     Jonathan Faubert
 *******************************************************************************/
/**
 * 
 */
package ca.mcgill.cs.swevo.qualyzer.ui;

import java.io.File;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ca.mcgill.cs.swevo.qualyzer.editors.CodeEditor;
import ca.mcgill.cs.swevo.qualyzer.editors.CodeFragmentViewer;
import ca.mcgill.cs.swevo.qualyzer.editors.InvestigatorFormEditor;
import ca.mcgill.cs.swevo.qualyzer.editors.MemoEditor;
import ca.mcgill.cs.swevo.qualyzer.editors.ParticipantFormEditor;
import ca.mcgill.cs.swevo.qualyzer.editors.TranscriptEditor;
import ca.mcgill.cs.swevo.qualyzer.editors.inputs.CodeEditorInput;
import ca.mcgill.cs.swevo.qualyzer.editors.inputs.CodeFragmentViewerInput;
import ca.mcgill.cs.swevo.qualyzer.editors.inputs.InvestigatorEditorInput;
import ca.mcgill.cs.swevo.qualyzer.editors.inputs.ParticipantEditorInput;
import ca.mcgill.cs.swevo.qualyzer.editors.inputs.RTFEditorInput;
import ca.mcgill.cs.swevo.qualyzer.model.Code;
import ca.mcgill.cs.swevo.qualyzer.model.Facade;
import ca.mcgill.cs.swevo.qualyzer.model.IAnnotatedDocument;
import ca.mcgill.cs.swevo.qualyzer.model.Investigator;
import ca.mcgill.cs.swevo.qualyzer.model.Memo;
import ca.mcgill.cs.swevo.qualyzer.model.Participant;
import ca.mcgill.cs.swevo.qualyzer.model.PersistenceManager;
import ca.mcgill.cs.swevo.qualyzer.model.Project;
import ca.mcgill.cs.swevo.qualyzer.model.Transcript;
import ca.mcgill.cs.swevo.qualyzer.providers.ProjectWrapper;
import ca.mcgill.cs.swevo.qualyzer.providers.WrapperCode;

/**
 * Contains methods for the opening of editors and retrieving the Project
 * given any of it's sub-elements.
 *
 */
public final class ResourcesUtil {
    private static final String ERROR_MSG = "Could not open editor"; //$NON-NLS-1$
    private static Logger gLogger = LoggerFactory.getLogger(ResourcesUtil.class);

    private ResourcesUtil() {
    }

    /**
     * Open the Investigator Editor.
     * @param page
     * @param investigator
     */
    public static void openEditor(IWorkbenchPage page, Investigator investigator) {
        InvestigatorEditorInput input = new InvestigatorEditorInput(investigator);
        try {
            page.openEditor(input, InvestigatorFormEditor.ID);
        } catch (PartInitException e) {
            gLogger.error(ERROR_MSG, e);
        }
    }

    /**
     * Open the Participant Editor.
     * @param page
     * @param participant
     */
    public static void openEditor(IWorkbenchPage page, Participant participant) {
        ParticipantEditorInput input = new ParticipantEditorInput(participant);
        try {
            page.openEditor(input, ParticipantFormEditor.ID);
        } catch (PartInitException e) {
            gLogger.error(ERROR_MSG, e);
        }
    }

    /**
     * Open the CodeFragmentViewer for the given code.
     * @param page
     * @param code
     */
    public static void openEditor(IWorkbenchPage page, Code code) {
        CodeFragmentViewerInput input = new CodeFragmentViewerInput(code);
        try {
            page.openEditor(input, CodeFragmentViewer.ID);
        } catch (PartInitException e) {
            e.printStackTrace();
        }
    }

    /**
     * Retrieves the Qualyzer project that the object belongs to, or represents.
     * @param element The object selected by the user.
     * @return The project the object belongs to.
     */
    public static Project getProject(Object element) {
        String projectName = ""; //$NON-NLS-1$
        if (element instanceof IProject) {
            projectName = ((IProject) element).getName();
        } else if (element instanceof ProjectWrapper) {
            projectName = ((ProjectWrapper) element).getProject().getName();
        } else {
            projectName = checkBaseTypes(element).getName();
        }

        return PersistenceManager.getInstance().getProject(projectName);
    }

    private static Project checkBaseTypes(Object element) {
        Project project = null;

        if (element instanceof Code) {
            project = ((Code) element).getProject();
        } else if (element instanceof Participant) {
            project = ((Participant) element).getProject();
        } else if (element instanceof Investigator) {
            project = ((Investigator) element).getProject();
        } else if (element instanceof Transcript) {
            project = ((Transcript) element).getProject();
        } else if (element instanceof Memo) {
            project = ((Memo) element).getProject();
        }

        return project;
    }

    /**
     * Open the Transcript editor.
     * @param page
     * @param transcript
     */
    public static IEditorPart openEditor(IWorkbenchPage page, Transcript transcript) {
        IEditorPart editorPart = null;
        IProject proj = ResourcesPlugin.getWorkspace().getRoot()
                .getProject(transcript.getProject().getFolderName());
        IFile file = proj.getFile("transcripts" + File.separator + transcript.getFileName()); //$NON-NLS-1$
        try {
            file.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
        } catch (CoreException e) {
            gLogger.error(ERROR_MSG, e);
        }

        if (!file.exists()) {
            MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                    Messages.getString("ui.ResourcesUtil.fileError"), //$NON-NLS-1$
                    Messages.getString("ui.ResourcesUtil.transcriptMissing")); //$NON-NLS-1$ 
            return editorPart;
        }
        String ext = file.getFileExtension();

        try {
            if (ext.equals("rtf") || ext.equals("txt")) //$NON-NLS-1$ //$NON-NLS-2$
            {
                Transcript lTranscript = Facade.getInstance().forceTranscriptLoad(transcript);
                RTFEditorInput editorInput = new RTFEditorInput(file, lTranscript);
                editorPart = page.openEditor(editorInput, TranscriptEditor.ID);
            }
        } catch (PartInitException e) {
            gLogger.error(ERROR_MSG, e);
        }

        return editorPart;
    }

    /**
     * Tries to open the right Document Editor.
     * @param page
     * @param document
     * @return
     */
    public static IEditorPart openEditor(IWorkbenchPage page, IAnnotatedDocument document) {
        if (document instanceof Transcript) {
            return openEditor(page, (Transcript) document);
        } else if (document instanceof Memo) {
            return openEditor(page, (Memo) document);
        }

        return null;
    }

    /**
     * Open the Transcript editor.
     * @param page
     * @param transcript
     */
    public static IEditorPart openEditor(IWorkbenchPage page, Memo memo) {
        IEditorPart editorPart = null;
        IProject proj = ResourcesPlugin.getWorkspace().getRoot().getProject(memo.getProject().getFolderName());
        IFile file = proj.getFile("memos" + File.separator + memo.getFileName()); //$NON-NLS-1$
        try {
            file.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
        } catch (CoreException e) {
            gLogger.error(ERROR_MSG, e);
        }

        if (!file.exists()) {
            MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                    Messages.getString("ui.ResourcesUtil.fileError"), //$NON-NLS-1$
                    Messages.getString("ui.ResourcesUtil.memoNotFound")); //$NON-NLS-1$
            return editorPart;
        }
        String ext = file.getFileExtension();

        try {
            if (ext.equals("rtf") || ext.equals("txt")) //$NON-NLS-1$ //$NON-NLS-2$
            {
                Memo lMemo = Facade.getInstance().forceMemoLoad(memo);
                RTFEditorInput editorInput = new RTFEditorInput(file, lMemo);
                editorPart = page.openEditor(editorInput, MemoEditor.ID);
            }
        } catch (PartInitException e) {
            gLogger.error(ERROR_MSG, e);
        }

        return editorPart;
    }

    /**
     * Closes the editor with the given name if it's open.
     * @param page
     * @param editorName
     */
    public static void closeEditor(IWorkbenchPage page, String editorName) {
        IEditorReference[] editors = page.getEditorReferences();
        for (IEditorReference editor : editors) {
            if (editor.getName().equals(editorName)) {
                page.closeEditor(editor.getEditor(true), true);
            }
        }
    }

    /**
     * Open a code editor.
     * @param page
     * @param project
     */
    public static void openEditor(IWorkbenchPage page, WrapperCode wrapperCode) {
        CodeEditorInput input = new CodeEditorInput(wrapperCode.getProject());
        try {
            page.openEditor(input, CodeEditor.ID);
        } catch (PartInitException e) {
            gLogger.error("Failed to open code editor.", e); //$NON-NLS-1$
        }
    }
}