/*********************************************************************************************
* Copyright (c) 2014-2015 Software Behaviour Analysis Lab, Concordia University, Montreal, Canada
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of Eclipse Public License v1.0 License which
* accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Syed Shariyar Murtaza -- Initial design and implementation
**********************************************************************************************/
package org.eclipse.tracecompass.totalads.ui.diagnosis;
import java.util.HashSet;
import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.totalads.readers.ITraceTypeReader;
import org.eclipse.tracecompass.totalads.readers.TraceTypeFactory;
import org.eclipse.tracecompass.totalads.ui.diagnosis.Diagnosis;
import org.eclipse.tracecompass.totalads.ui.diagnosis.DiagnosisPartListener;
import org.eclipse.tracecompass.totalads.ui.diagnosis.DiagnosisView;
import org.eclipse.tracecompass.totalads.ui.diagnosis.IDiagnosisObserver;
import org.eclipse.tracecompass.totalads.ui.diagnosis.Messages;
import org.eclipse.tracecompass.totalads.ui.models.DataModelsView;
import org.eclipse.tracecompass.totalads.ui.results.ResultsView;
import org.eclipse.tracecompass.totalads.ui.results.ResultsAndFeedback;
import org.eclipse.tracecompass.tmf.ui.views.TmfView;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.jface.viewers.StructuredSelection;
/**
* This class creates the diagnosis view
*
* @author <p>
* Syed Shariyar Murtaza justsshary@hotmail.com
* </p>
*
*/
public class DiagnosisView extends TmfView implements IDiagnosisObserver, ISelectionListener {
/**
* View id
*/
public static final String VIEW_ID = "org.eclipse.tracecompass.totalads.ui.diagnosis.DiagnosisView"; //$NON-NLS-1$
private Diagnosis fDiagnosis;
private DiagnosisPartListener fPartListener;
/**
* Constructor
*/
public DiagnosisView() {
super(VIEW_ID);
fDiagnosis = new Diagnosis();
fPartListener = new DiagnosisPartListener();
fPartListener.addObserver(this);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
* .Composite)
*/
@Override
public void createPartControl(Composite compParent) {
fDiagnosis.createControl(compParent);
ITmfTrace trace = getActiveTrace();
if (trace != null) {
traceSelected(new TmfTraceSelectedSignal(this, trace));
}
try {
// Trying to clear the already selected instances in the models view
// when this view is opened in the middle of execution
// If the view is opened in the middle, already selected models are
// not available using the event handler
IViewPart dataModelsView = getSite().getWorkbenchWindow().getActivePage().showView(DataModelsView.VIEW_ID);
if (dataModelsView instanceof DataModelsView) {
((DataModelsView) dataModelsView).refresh();
}
// / Registers a listener to Eclipse to get the list of models
// selected (checked) by the user
getSite().getPage().addSelectionListener(DataModelsView.VIEW_ID, this);
IViewPart viewRes = getSite().getWorkbenchWindow().getActivePage().showView(ResultsView.VIEW_ID);
ResultsView resView = (ResultsView) viewRes;
fDiagnosis.setResultsAndFeedbackInstance(resView.getResultsAndFeddbackInstance());
// Registers a part listener
getSite().getPage().addPartListener(fPartListener);
} catch (PartInitException e) {
String msgTitle="TotalADS"; //$NON-NLS-1$
if (e.getMessage() != null) {
MessageDialog.openError(getSite().getShell(),
msgTitle,e.getMessage());
} else {
MessageDialog.openError(getSite().getShell(),
msgTitle,Messages.DiagnosisView_UnableToLaunch);
}
Logger.getLogger(DiagnosisView.class.getName()).error(e.getMessage(), e);
}
}
/**
* Sets the focus
*/
@Override
public void setFocus() {
}
/**
* Gets called from TMF when a trace is selected
*
* @param signal TMF signal
*/
@TmfSignalHandler
public void traceSelected(final TmfTraceSelectedSignal signal) {
ITmfTrace currentTrace = signal.getTrace();
// ITmfTrace trace = signal.getTrace();
// Right now we are not sure how to determine whether a trace is a user
// space trace or kernel space trace
// so we are only considering kernel space traces
Boolean isKernelSpace = true;
ITraceTypeReader traceReader = TraceTypeFactory.getInstance().getCTFKernelReaderOrSimpleTextReader(isKernelSpace);
fDiagnosis.updateOnTraceSelection(currentTrace.getPath(), traceReader.getName());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.tracecompass.ui.views.TmfView#dispose()
*/
@Override
public void dispose() {
super.dispose();
getSite().getPage().removeSelectionListener(DataModelsView.VIEW_ID, this);
fPartListener.removeObserver(this);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.tracecompass.totalads.ui.diagnosis.IDiagnosisObserver#update
* (org.eclipse.tracecompass.totalads.ui.results.ResultsAndFeedback)
*/
@Override
public void update(ResultsAndFeedback results) {
fDiagnosis.setResultsAndFeedbackInstance(results);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.
* IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
*/
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (part instanceof DataModelsView) {
Object obj = ((StructuredSelection) selection).getFirstElement();
@SuppressWarnings("unchecked")
HashSet<String> modelsList = (HashSet<String>) obj;
fDiagnosis.updateonModelSelection(modelsList);
}
}
}