/********************************************************************************************* * 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.models.settings; import java.util.HashSet; import org.apache.log4j.Logger; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.core.commands.IHandlerListener; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.tracecompass.totalads.algorithms.AlgorithmUtility; import org.eclipse.tracecompass.totalads.algorithms.IDetectionAlgorithm; import org.eclipse.tracecompass.totalads.dbms.DBMSFactory; import org.eclipse.tracecompass.totalads.dbms.IDataAccessObject; import org.eclipse.tracecompass.totalads.exceptions.TotalADSGeneralException; import org.eclipse.tracecompass.totalads.ui.models.DataModelsView; import org.eclipse.tracecompass.totalads.ui.models.settings.Messages; import org.eclipse.tracecompass.totalads.ui.models.settings.TestSettingsDialog; import org.eclipse.tracecompass.totalads.ui.models.settings.TestSettingsHandler; //import org.eclipse.swt.SWT; //import org.eclipse.swt.widgets.MessageBox; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; /** * This class implements the settings command. It allows to edit settings for a * model selected in the {@link DataModelsView}. * * @author <p> * Syed Shariyar Murtaza justsshary@htomail.com * </p> * */ public class TestSettingsHandler implements IHandler { private HashSet<String> fSelectedModels; private TestSettingsDialog fSettingsDialog; /** * Constructor */ @SuppressWarnings("unchecked") public TestSettingsHandler() { fSelectedModels = new HashSet<>(); // / Registers a listener to Eclipse to get the list of models selected // (checked) by the user PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().addSelectionListener(DataModelsView.VIEW_ID, new ISelectionListener() { @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (part instanceof DataModelsView) { Object obj = ((org.eclipse.jface.viewers.StructuredSelection) selection).getFirstElement(); fSelectedModels = (HashSet<String>) obj; } } }); } /* * (non-Javadoc) * * @see * org.eclipse.core.commands.IHandler#addHandlerListener(org.eclipse.core * .commands.IHandlerListener) */ @Override public void addHandlerListener(IHandlerListener handlerListener) { } /* * (non-Javadoc) * * @see org.eclipse.core.commands.IHandler#dispose() */ @Override public void dispose() { } /* * (non-Javadoc) * * @see * org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands. * ExecutionEvent) */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { String msgTitle="TotalADS"; //$NON-NLS-1$ try { // Checking for the proper selection if (fSelectedModels.size() > 1) { MessageDialog.openError(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),msgTitle , Messages.TestSettingsHandler_SelOneModel); return null; } else if (fSelectedModels.size() < 1) { MessageDialog.openError(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),msgTitle , Messages.TestSettingsHandler_SelModel); return null; } IDataAccessObject connection = DBMSFactory.INSTANCE.getDataAccessObject(); // Open the settings dialog if (connection.isConnected()) { String model = fSelectedModels.iterator().next(); // get the // only // selected // model IDetectionAlgorithm algorithm = AlgorithmUtility.getAlgorithmFromModelName(model); String[] settings = algorithm.getTestSettings(model, connection); fSettingsDialog = new TestSettingsDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() , algorithm, model, settings); fSettingsDialog.create(); fSettingsDialog.open(); } else { MessageDialog.openError(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),msgTitle , Messages.TestSettingsHandler_NoConn); } } catch (TotalADSGeneralException ex) { MessageDialog.openError(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),msgTitle , ex.getMessage()); // msgBoxErr.setMessage(ex.getMessage()); // msgBoxErr.open(); } catch (Exception ex) { MessageDialog.openError(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),msgTitle , ex.getMessage()); // msgBoxErr.setMessage(ex.getMessage()); // msgBoxErr.open(); Logger.getLogger(TestSettingsHandler.class.getName()).error(ex.getMessage(), ex); // Check if connection still exists and all the views are notified // of the presence and absence of connection DBMSFactory.INSTANCE.verifyConnection(); } finally { fSettingsDialog = null; } return null; } /* * (non-Javadoc) * * @see org.eclipse.core.commands.IHandler#isEnabled() */ @Override public boolean isEnabled() { return true; } /* * (non-Javadoc) * * @see org.eclipse.core.commands.IHandler#isHandled() */ @Override public boolean isHandled() { return true; } /* * (non-Javadoc) * * @see * org.eclipse.core.commands.IHandler#removeHandlerListener(org.eclipse. * core.commands.IHandlerListener) */ @Override public void removeHandlerListener(IHandlerListener handlerListener) { } }