package org.teiid.designer.transformation.ui.actions;
import static org.teiid.designer.ui.PluginConstants.Prefs.General.AUTO_OPEN_EDITOR_IF_NEEDED;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Shell;
import org.teiid.core.designer.util.I18nUtil;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.workspace.ModelResource;
import org.teiid.designer.core.workspace.ModelWorkspaceException;
import org.teiid.designer.metamodels.relational.Table;
import org.teiid.designer.transformation.ui.UiPlugin;
import org.teiid.designer.ui.UiConstants;
import org.teiid.designer.ui.actions.SortableSelectionAction;
import org.teiid.designer.ui.common.eventsupport.SelectionUtilities;
import org.teiid.designer.ui.editors.ModelEditorManager;
import org.teiid.designer.ui.viewsupport.ModelUtilities;
public class ClearMaterializationAction extends SortableSelectionAction {
private static final String I18N_PREFIX = I18nUtil.getPropertyPrefix(ClearMaterializationAction.class);
public ClearMaterializationAction() {
super();
setImageDescriptor(UiPlugin.getDefault().getImageDescriptor(
org.teiid.designer.transformation.ui.PluginConstants.Images.CREATE_MATERIALIZED_VIEWS_ICON));
}
/**
*
*/
@Override
public boolean isApplicable( final ISelection selection ) {
return isValidSelection(selection);
}
/**
* Valid selections include only Virtual Relational Tables.
*
* @return
* @since 4.1
*/
@Override
protected boolean isValidSelection( final ISelection selection ) {
boolean isValid = true;
if (SelectionUtilities.isEmptySelection(selection) ||
!SelectionUtilities.isAllEObjects(selection) ||
SelectionUtilities.getSelectedEObjects(selection).size() > 1) isValid = false;
if (isValid) {
final EObject eObject = SelectionUtilities.getSelectedEObject(selection);
if ( eObject instanceof Table ) {
isValid = ((Table)eObject).isMaterialized();
} else isValid = false;
} else isValid = false;
return isValid;
}
@Override
public void run() {
boolean requiredStart = ModelerCore.startTxn(false, false, "Clear Materialization", this); //$NON-NLS-1$
boolean succeeded = false;
try {
if( forceEditorOpen() ) {
Table table = (Table)(SelectionUtilities.getSelectedEObject(getSelection()));
table.setMaterialized(false);
table.setMaterializedTable(null);
succeeded = true;
}
} catch (Exception ex) {
UiConstants.Util.log(IStatus.ERROR, ex,
UiPlugin.getDefault().getString(I18N_PREFIX, "errorClearingMaterializedProperties")); //$NON-NLS-1$
} finally {
// if we started the txn, commit it.
if (requiredStart) {
if (succeeded) {
ModelerCore.commitTxn();
} else {
ModelerCore.rollbackTxn();
}
}
}
}
private boolean forceEditorOpen() throws ModelWorkspaceException {
final EObject eObject = SelectionUtilities.getSelectedEObject(getSelection());
ModelResource mr = ModelUtilities.getModelResourceForModelObject(eObject);
if ( ! ModelEditorManager.isOpen((IFile)mr.getCorrespondingResource()) ) {
// get preference value for auto-open-editor
String autoOpen = UiPlugin.getDefault().getPreferenceStore().getString(AUTO_OPEN_EDITOR_IF_NEEDED);
// if the preference is to auto-open, then set forceOpen so we don't prompt the user
boolean forceOpen = MessageDialogWithToggle.ALWAYS.equals(autoOpen);
// If no preference, prompt the user
if (!forceOpen) {
Shell shell = UiPlugin.getDefault().getCurrentWorkbenchWindow().getShell();
forceOpen = ModelEditorManager.showDialogShouldOpenEditor(shell);
}
if(forceOpen) {
ModelEditorManager.activate((IFile)mr.getCorrespondingResource(), true);
return true;
} else {
return false;
}
}
return true;
}
}