/*********************************************************************************************
* 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.delete;
import java.util.HashSet;
import java.util.Iterator;
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.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.tracecompass.totalads.dbms.DBMSFactory;
import org.eclipse.tracecompass.totalads.ui.models.DataModelsView;
import org.eclipse.swt.widgets.Display;
import org.eclipse.tracecompass.totalads.ui.models.delete.DeleteModelHandler;
import org.eclipse.tracecompass.totalads.ui.models.delete.Messages;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
/**
* This class implements the delete command for an icon on the
* {@link DataModelsView}). Its object is executed by Eclipse automatically
* whenever the delete icon is clicked.
*
* @author <p>
* Syed Shariyar Murtaza justsshary@hotmail.com
* </p>
*
*/
public class DeleteModelHandler implements IHandler {
private HashSet<String> fSelectedModels;
/**
* Constructor
*/
@SuppressWarnings("unchecked")
public DeleteModelHandler() {
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() {
}
/*
* This function deletes a model from the database (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$
// MessageBox msgBoxYesNo = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
// SWT.ICON_INFORMATION | SWT.YES | SWT.NO);
//msgBoxYesNo.setText(msgTitle);
try {
// checking if a model is selected
if (fSelectedModels.size() <= 0) {
MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
msgTitle,Messages.DeleteModelHandler_SelModel);
return null;
}
//
// Get confirmation
//
Iterator<String> it = fSelectedModels.iterator();
String message = Messages.DeleteModelHandler_WantToDel;
int count = 1;
while (it.hasNext()) {
if (count == 1 && fSelectedModels.size() <= 2) {
message += it.next() + " "; //$NON-NLS-1$
} else if (count == 1 && fSelectedModels.size() > 2) {
message += it.next() + ", "; //$NON-NLS-1$
} else if (count > 1 && count < fSelectedModels.size()) {
message += it.next() + ", "; //$NON-NLS-1$
} else if (count > 1 && count == fSelectedModels.size()) {
message += Messages.DeleteModelHandler_And + it.next();
}
count++;
}
message += "?"; //$NON-NLS-1$
MessageDialog msgBoxYesNo= new MessageDialog(Display.getDefault().getActiveShell(),
msgTitle, null, message, MessageDialog.QUESTION, new String[]{
IDialogConstants.NO_LABEL, IDialogConstants.YES_LABEL,}, 0);
if (msgBoxYesNo.open() == 1) {//YES
// Delete models now
it = fSelectedModels.iterator();
while (it.hasNext()) {
String err = DBMSFactory.INSTANCE.deleteDatabase(it.next());
if (!err.isEmpty()) { // if the database is not connected
MessageDialog.openError(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
msgTitle,err);
break;
}
}
}
} catch (Exception ex) {
if (ex.getMessage() != null) {
MessageDialog.openError(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
msgTitle,ex.getMessage());
} else {
MessageDialog.openError(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
msgTitle,Messages.DeleteModelHandler_ErrDel);
}
Logger.getLogger(DeleteModelHandler.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();
}
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) {
}
}