/*********************************************************************************************
* 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.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.jface.dialogs.MessageDialog;
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.results.ResultsAndFeedback;
import org.eclipse.tracecompass.totalads.ui.results.ResultsView;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
/**
* Implements an Eclipse Part Listener for the diagnosis view
*
* @author <p>
* Syed Shariyar Murtaza justsshary@hotmail.com
* </p>
*
*/
public class DiagnosisPartListener implements IPartListener {
private List<IDiagnosisObserver> fObservers;
/**
* Constructor to create the part listener
*/
public DiagnosisPartListener() {
fObservers = new ArrayList<>();
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void partActivated(IWorkbenchPart part) {
try {
if (part instanceof DiagnosisView) {
// Launching Results View if it is not opened
IViewPart viewRes = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ResultsView.VIEW_ID);
ResultsView resultsView = (ResultsView) viewRes;
notifyObservers(resultsView.getResultsAndFeddbackInstance());
}
} catch (PartInitException e) {
String msgTitle="TotalADS"; //$NON-NLS-1$
if (e.getMessage() != null) {
MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
msgTitle,e.getMessage());
}
else {
MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
msgTitle,Messages.DiagnosisPartListener_UnableToLaunch);
}
Logger.getLogger(DiagnosisPartListener.class.getName()).error(e.getMessage(), e);
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart
* )
*/
@Override
public void partBroughtToTop(IWorkbenchPart part) {
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void partClosed(IWorkbenchPart part) {
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart
* )
*/
@Override
public void partDeactivated(IWorkbenchPart part) {
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void partOpened(IWorkbenchPart part) {
}
/**
* Adds an observer
*
* @param observer
* An observer
*/
public void addObserver(IDiagnosisObserver observer) {
fObservers.add(observer);
}
/**
* Removes an observer
*
* @param observer
* An observer
*/
public void removeObserver(IDiagnosisObserver observer) {
fObservers.remove(observer);
}
/**
* Notifies the fObservers about the {@link ResultsAndFeedback} object
*
* @param results
* An object to display results
*/
private void notifyObservers(ResultsAndFeedback results) {
for (IDiagnosisObserver ob : fObservers) {
ob.update(results);
}
}
}