blob: 6f9ef96083f955882c582c844a9bf24caac499bf [file] [log] [blame]
package org.eclipse.emf.refactor.metrics.runtime.managers;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.refactor.metrics.configuration.core.Configuration;
import org.eclipse.emf.refactor.metrics.configuration.managers.ConfigurationManager;
import org.eclipse.emf.refactor.metrics.interfaces.IHighlighting;
import org.eclipse.emf.refactor.metrics.runtime.core.MetricCalculator;
import org.eclipse.emf.refactor.metrics.runtime.core.Result;
import org.eclipse.emf.refactor.metrics.runtime.ui.MetricResultsView;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
public class RuntimeManager {
private static MetricCalculator calculator;
private static LinkedList<Result> resultsViewInput;
private static TableViewer resultsViewer = null;
private static List<Action> additionalActions = new ArrayList<Action>();
private static List<IHighlighting> additionalHighlightings = new ArrayList<IHighlighting>();
private static RuntimeManager instance;
private RuntimeManager() {
calculator = MetricCalculator.getInstance();
resultsViewInput = new LinkedList<Result>();
System.out.println("RuntimeManager initialized!");
}
public static RuntimeManager getInstance() {
if (instance == null) {
instance = new RuntimeManager();
}
return instance;
}
public static RuntimeManager getInstance(Action action) {
if (instance == null) {
instance = new RuntimeManager();
additionalActions.add(action);
} else {
additionalActions.add(action);
}
return instance;
}
public static RuntimeManager getInstance(IHighlighting highlighting) {
if (instance == null) {
instance = new RuntimeManager();
additionalHighlightings.add(highlighting);
} else {
additionalHighlightings.add(highlighting);
}
return instance;
}
public static void setResultsViewer(TableViewer viewer){
resultsViewer = viewer;
}
public static LinkedList<Result> getResultsViewInput(){
return resultsViewInput;
}
public static void calculateConfiguredMetricsOnElement(IProject project, List<EObject> context){
ConfigurationManager.getInstance();
Configuration configuration = ConfigurationManager.getConfiguration(project);
calculator.setConfiguration(configuration);
calculator.setContext(context);
calculator.calculateMetrics();
resultsViewInput.addAll(calculator.getResults());
if(! isMetricsViewOpen()){
createMetricsView();
}
if(resultsViewer != null && resultsViewInput != null) {
resultsViewer.setInput(resultsViewInput);
}
}
public static void calculateConfiguredMetricsTransitively(IProject project, EObject root) {
ConfigurationManager.getInstance();
Configuration configuration = ConfigurationManager.getConfiguration(project);
calculator.setConfiguration(configuration);
LinkedList<Result> results = new LinkedList<Result>();
LinkedList<EObject> allEObjects = new LinkedList<EObject>();
allEObjects.add(root);
allEObjects.addAll(getAllEObjects(root));
for(EObject currentEObject : allEObjects) {
ArrayList<EObject> contextObjectList = new ArrayList<EObject>();
contextObjectList.add(currentEObject);
calculator.setContext(contextObjectList);
calculator.calculateMetrics();
results.addAll(calculator.getResults());
}
if(!isMetricsViewOpen()) {
createMetricsView();
}
if(resultsViewer != null && resultsViewInput != null) {
resultsViewInput.addAll(results);
resultsViewer.setInput(resultsViewInput);
}
}
private static List<EObject> getAllEObjects(EObject root) {
ArrayList<EObject> eObjects = new ArrayList<EObject>();
List<EObject> directContents = root.eContents();
eObjects.addAll(directContents);
for(EObject contentObject : directContents){
eObjects.addAll(getAllEObjects(contentObject));
}
return eObjects;
}
private static void createMetricsView(){
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
try{
page.showView(MetricResultsView.ID);
setAdditionalActionsToView(getMetricsView());
setAdditionalHightightingsToView(getMetricsView());
} catch (PartInitException e) {
e.printStackTrace();
}
}
private static MetricResultsView getMetricsView() {
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
for(int i=0; i<page.getViewReferences().length; i++) {
if(page.getViewReferences()[i].getId().equals(MetricResultsView.ID)) {
return ((MetricResultsView) page.getViewReferences()[i].getView(true));
}
}
return null;
}
private static boolean isMetricsViewOpen() {
MetricResultsView view = getMetricsView();
if (view != null) {
setAdditionalActionsToView(view);
setAdditionalHightightingsToView(getMetricsView());
return true;
}
return false;
}
private static void setAdditionalActionsToView(MetricResultsView view) {
for (Action action : additionalActions) {
System.out.println("RuntimeManager: add action '" + action + "' to view!");
view.addAction(action);
}
view.addActionsToMenu();
}
private static void setAdditionalHightightingsToView(MetricResultsView view) {
for (IHighlighting highlighting : additionalHighlightings) {
System.out.println("RuntimeManager: add highlighting '" + highlighting + "' to view!");
view.addHighlighting(highlighting);
}
}
}