/**
* Copyright (c) 2009-2010 MATSUFUJI Hideharu <matsufuji2008@gmail.com>,
* 2010-2011 KUBO Atsuhiro <kubo@iteman.jp>,
* All rights reserved.
*
* This file is part of MakeGood.
*
* 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 com.piece_framework.makegood.ui;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.internal.ui.editor.EditorUtility;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.IConsoleConstants;
import com.piece_framework.makegood.core.preference.MakeGoodProperties;
import com.piece_framework.makegood.ui.views.ResultView;
public class ActivePart {
/**
* @since 1.6.0
*/
private static final String VIEW_ID_PHPDEBUGOUTPUT = "org.eclipse.debug.ui.PHPDebugOutput"; //$NON-NLS-1$
/**
* @since 1.6.0
*/
private static final String VIEW_ID_PHPBROWSEROUTPUT = "org.eclipse.debug.ui.PHPBrowserOutput"; //$NON-NLS-1$
private Object entity;
public void update(IWorkbenchPart part) {
String id = part.getSite().getId();
if (ResultView.VIEW_ID.equals(id)) return;
if (VIEW_ID_PHPDEBUGOUTPUT.equals(id)) return;
if (VIEW_ID_PHPBROWSEROUTPUT.equals(id)) return;
if (IConsoleConstants.ID_CONSOLE_VIEW.equals(id)) return;
if (shouldUpdateLink(part)) {
updateLink(part);
}
if (!(part instanceof IEditorPart)) {
ISelectionProvider provider = part.getSite().getSelectionProvider();
if (provider != null) {
provider.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
if (shouldUpdateLink(event.getSelection())) {
updateLink(event.getSelection());
}
}
});
}
}
}
public void update() {
IWorkbenchPart activePart = getActivePart();
if (activePart != null) {
update(activePart);
}
}
public static boolean isAllTestsRunnable(Object target) {
if (target == null) return false;
IResource resource = getResource(target);
if (resource == null) return false;
if (!resource.getProject().exists()) return false;
if (new MakeGoodProperties(resource).getTestFolders().size() == 0) return false;
return true;
}
public boolean isAllTestsRunnable() {
return isAllTestsRunnable(entity);
}
public Object getEntity() {
return entity;
}
public static IResource getResource(Object target) {
if (target instanceof IStructuredSelection) {
IStructuredSelection selection = (IStructuredSelection) target;
if (selection.getFirstElement() instanceof IModelElement) {
return ((IModelElement) selection.getFirstElement()).getResource();
} else if (selection.getFirstElement() instanceof IResource) {
return (IResource) selection.getFirstElement();
}
} else if (target instanceof IEditorPart) {
ISourceModule source =
EditorUtility.getEditorInputModelElement((IEditorPart) target, false);
if (source != null) {
return source.getResource();
}
IEditorPart editor = (IEditorPart) target;
if (editor.getEditorInput() instanceof IFileEditorInput) {
return ((IFileEditorInput) editor.getEditorInput()).getFile();
}
}
return null;
}
public IProject getProject() {
return getProject(entity);
}
/**
* @since 1.6.0
*/
public static IWorkbenchPart getActivePart() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window == null) return null;
IWorkbenchPage page = window.getActivePage();
if (page == null) return null;
return page.getActivePart();
}
/**
* @since 1.5.0
*/
private IProject getProject(Object target) {
if (target == null) return null;
IResource resource = getResource(target);
if (resource == null) return null;
return resource.getProject();
}
/**
* @since 1.5.0
*/
private boolean shouldUpdateLink(Object target) {
IProject project = getProject(target);
if (project == null) return false;
if (!project.exists()) return false;
return true;
}
/**
* @since 1.6.0
*/
private void updateLink(Object entity) {
this.entity = entity;
IProject project = getProject(this.entity);
if (project != null) {
MakeGoodContext.getInstance().getStatusMonitor().addPreferenceChangeListener(new ProjectScope(project));
}
MakeGoodContext.getInstance().updateStatus();
}
}