/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.runtime.ui.actions; import java.util.Properties; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.action.Action; import org.eclipse.jface.window.Window; import org.eclipse.ui.PartInitException; import org.eclipse.ui.dialogs.ISelectionStatusValidator; import org.eclipse.ui.ide.IDE; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.runtime.ui.DqpUiConstants; import org.teiid.designer.runtime.ui.DqpUiPlugin; import org.teiid.designer.runtime.ui.vdb.VdbConstants; import org.teiid.designer.ui.common.util.UiUtil; import org.teiid.designer.ui.common.viewsupport.ClosedProjectFilter; import org.teiid.designer.ui.common.viewsupport.StatusInfo; import org.teiid.designer.ui.explorer.ModelExplorerContentProvider; import org.teiid.designer.ui.explorer.ModelExplorerLabelProvider; import org.teiid.designer.ui.viewsupport.DesignerPropertiesUtil; import org.teiid.designer.ui.viewsupport.ModelWorkspaceDialog; import org.teiid.designer.ui.viewsupport.SingleProjectFilter; /** * @since 8.0 */ public class EditVdbAction extends Action implements VdbConstants { private static final String PREFIX = I18nUtil.getPropertyPrefix(EditVdbAction.class); Properties designerProperties; /** * @since 5.0 */ public EditVdbAction() { super(); setImageDescriptor(DqpUiPlugin.getDefault().getImageDescriptor(DqpUiConstants.Images.EDIT_VDB)); setToolTipText(DqpUiConstants.UTIL.getString(PREFIX + "tooltip")); //$NON-NLS-1$ } /** * @since 5.0 */ public EditVdbAction(Properties properties) { super(); setImageDescriptor(DqpUiPlugin.getDefault().getImageDescriptor(DqpUiConstants.Images.EDIT_VDB)); setToolTipText(DqpUiConstants.UTIL.getString(PREFIX + "tooltip")); //$NON-NLS-1$ designerProperties = properties; } @Override public void run() { IResource theVdb = DesignerPropertiesUtil.getVDB(designerProperties); IFile selectedVdb = null; if( theVdb != null ) { selectedVdb = (IFile)theVdb; } if( selectedVdb == null ) { ModelWorkspaceDialog vdbDialog = getSelectVdbDialog(); // add filters vdbDialog.addFilter(new ClosedProjectFilter()); vdbDialog.open(); if (vdbDialog.getReturnCode() == Window.OK) { Object[] selections = vdbDialog.getResult(); // should be single selection selectedVdb = (IFile) selections[0]; } } if( selectedVdb != null ) { try { IDE.openEditor(UiUtil.getWorkbenchPage(), selectedVdb, true); } catch (PartInitException ex) { // TODO Auto-generated catch block ex.printStackTrace(); } } } private ModelWorkspaceDialog getSelectVdbDialog() { ModelWorkspaceDialog selectVdbDialog = new ModelWorkspaceDialog(UiUtil.getWorkbenchShellOnlyIfUiThread(), null, new ModelExplorerLabelProvider(), new ModelExplorerContentProvider()); // add filters selectVdbDialog.addFilter(new ClosedProjectFilter()); selectVdbDialog.addFilter(new SingleProjectFilter(this.designerProperties)); String title = DqpUiConstants.UTIL.getString(PREFIX + "selectionDialog.title"); //$NON-NLS-1$ String message = DqpUiConstants.UTIL.getString(PREFIX + "selectionDialog.message"); //$NON-NLS-1$ selectVdbDialog.setTitle(title); selectVdbDialog.setMessage(message); selectVdbDialog.setAllowMultiple(false); selectVdbDialog.setInput(ModelerCore.getWorkspace().getRoot()); selectVdbDialog.setValidator(new ISelectionStatusValidator() { @Override public IStatus validate(Object[] selection) { if (selection != null && selection.length == 1 ) { if (selection[0] instanceof IFile) { String extension = ((IFile)selection[0]).getFileExtension(); if (extension != null && extension.equals(VDB_EXTENSION)) { return new StatusInfo(DqpUiConstants.PLUGIN_ID); } } } if( selection == null || selection.length == 0 ) { return new StatusInfo(DqpUiConstants.PLUGIN_ID, IStatus.ERROR, DqpUiConstants.UTIL.getString(PREFIX + "selectionDialog.emptySelection")); //$NON-NLS-1$ } String msg = DqpUiConstants.UTIL.getString(PREFIX + "selectionDialog.invalidSelection"); //$NON-NLS-1$ return new StatusInfo(DqpUiConstants.PLUGIN_ID, IStatus.ERROR, msg); } }); return selectVdbDialog; } }