package org.teiid.designer.runtime.ui.connection;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.teiid.core.designer.util.FileUtils;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.workspace.ModelResource;
import org.teiid.designer.core.workspace.ModelUtil;
import org.teiid.designer.core.workspace.ModelWorkspaceException;
import org.teiid.designer.core.workspace.ResourceAnnotationHelper;
import org.teiid.designer.datatools.connection.ConnectionInfoHelper;
import org.teiid.designer.datatools.connection.IConnectionInfoHelper;
import org.teiid.designer.runtime.DqpPlugin;
import org.teiid.designer.runtime.spi.ITeiidServer;
import org.teiid.designer.runtime.ui.DqpUiConstants;
import org.teiid.designer.runtime.ui.DqpUiPlugin;
import org.teiid.designer.ui.actions.SortableSelectionAction;
import org.teiid.designer.ui.common.eventsupport.SelectionUtilities;
import org.teiid.designer.ui.viewsupport.ModelIdentifier;
/**
* @since 8.0
*/
public class DeleteDataSourceAction extends SortableSelectionAction implements DqpUiConstants {
private static final String label = DqpUiConstants.UTIL.getString("DeleteDataSourceAction.label"); //$NON-NLS-1$
public static final String JDBC_DS_TYPE = "connector-jdbc"; //$NON-NLS-1$
/**
* @since 5.0
*/
public DeleteDataSourceAction() {
super(label, SWT.DEFAULT);
setImageDescriptor(DqpUiPlugin.getDefault().getImageDescriptor(Images.SOURCE_BINDING_ICON));
}
/**
* @see org.teiid.designer.ui.actions.SortableSelectionAction#isValidSelection(org.eclipse.jface.viewers.ISelection)
* @since 5.0
*/
@Override
public boolean isValidSelection( ISelection selection ) {
// Enable for single/multiple Virtual Tables
return sourceModelSelected(selection);
}
/**
* @see org.eclipse.jface.action.IAction#run()
* @since 5.0
*/
@Override
public void run() {
IFile modelFile = (IFile)SelectionUtilities.getSelectedObjects(getSelection()).get(0);
try {
removeDataSource(modelFile);
} catch (Exception e) {
MessageDialog.openError(getShell(),
DqpUiConstants.UTIL.getString("DeleteDataSourceAction.errorRemovingDataSource", modelFile.getName()), e.getMessage()); //$NON-NLS-1$
DqpUiConstants.UTIL.log(IStatus.ERROR,
e,
DqpUiConstants.UTIL.getString("DeleteDataSourceAction.errorRemovingDataSource", modelFile.getName())); //$NON-NLS-1$
}
}
public boolean removeDataSource( IFile modelFile ) throws Exception {
Properties properties = getConnectionProperties(modelFile);
if (properties != null && !properties.isEmpty()) {
ITeiidServer teiidServer = DqpPlugin.getInstance().getServerManager().getDefaultServer();
String name = FileUtils.getNameWithoutExtension(modelFile);
String jndiName = new ConnectionInfoHelper().generateUniqueConnectionJndiName(name,
modelFile.getFullPath(),
ModelerCore.workspaceUuid().toString());
teiidServer.deleteDataSource(jndiName);
return true;
}
return false;
}
/**
* @see org.teiid.designer.ui.actions.ISelectionAction#isApplicable(org.eclipse.jface.viewers.ISelection)
* @since 5.0
*/
@Override
public boolean isApplicable( ISelection selection ) {
return sourceModelSelected(selection);
}
private boolean sourceModelSelected( ISelection theSelection ) {
boolean result = false;
List allObjs = SelectionUtilities.getSelectedObjects(theSelection);
if (!allObjs.isEmpty() && allObjs.size() == 1) {
Iterator iter = allObjs.iterator();
{
}
result = true;
Object nextObj = null;
while (iter.hasNext() && result) {
nextObj = iter.next();
if (nextObj instanceof IFile) {
result = ModelIdentifier.isRelationalSourceModel((IFile)nextObj);
} else {
result = false;
}
}
}
return result;
}
public Properties getConnectionProperties( IFile model ) {
ModelResource modelResource = null;
try {
modelResource = ModelUtil.getModelResource(model, true);
if (modelResource != null) {
ResourceAnnotationHelper resourceHelper = new ResourceAnnotationHelper();
return resourceHelper.getProperties(modelResource, IConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE);
}
DqpUiConstants.UTIL.log(IStatus.ERROR,
DqpUiConstants.UTIL.getString("DeleteDataSourceAction.errorCannotFindDataSourceProperties", model.getName())); //$NON-NLS-1$
} catch (ModelWorkspaceException e) {
DqpUiConstants.UTIL.log(IStatus.ERROR,
DqpUiConstants.UTIL.getString("DeleteDataSourceAction.errorFindingModelResource", model.getName())); //$NON-NLS-1$
}
return null;
}
private Shell getShell() {
return Display.getCurrent().getActiveShell();
}
}