/* * 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.xml.ui.wizards; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.metamodels.xml.XmlDocument; import org.teiid.designer.metamodels.xml.XmlRoot; 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.ModelWorkspaceDialog; import org.teiid.designer.xml.ui.ModelerXmlUiConstants; /** * Dialog designed specifically for users to select XML Document nodes or XML Document Roots Used initiallyl by * GenerateWebServiceModelAction2 * * @since 8.0 */ public class XmlDocumentSelectorDialog extends ModelWorkspaceDialog implements ModelerXmlUiConstants { private EObject selectedEObject; private static final String TITLE = ModelerXmlUiConstants.Util.getString("XmlDocumentSelectorDialog.title"); //$NON-NLS-1$ private static final String INITIAL_MESSAGE = ModelerXmlUiConstants.Util.getString("XmlDocumentSelectorDialog.initialMessage"); //$NON-NLS-1$ private static final String INVALID_SELECTION_MESSAGE = ModelerXmlUiConstants.Util.getString("XmlDocumentSelectorDialog.invalidSelectionMessage"); //$NON-NLS-1$ /** * Construct an instance of ModelWorkspaceDialog. This constructor defaults to the resource root. * * @param parent */ public XmlDocumentSelectorDialog( Shell parent ) { this(parent, new ModelExplorerLabelProvider(), new ModelExplorerContentProvider()); } /** * Construct an instance of ModelWorkspaceDialog. This constructor defaults to the resource root. * * @param parent * @param labelProvider an ILabelProvider for the tree * @param contentProvider an ITreeContentProvider for the tree */ public XmlDocumentSelectorDialog( Shell parent, ILabelProvider labelProvider, ITreeContentProvider contentProvider ) { super(parent, TITLE, labelProvider, contentProvider); this.setMessage(INITIAL_MESSAGE); } /* * @see Dialog#createDialogArea(Composite) */ @Override protected Control createDialogArea( Composite parent ) { Composite composite = (Composite)super.createDialogArea(parent); // add code here to include new relationshipmodel panel: createModelCreationComposite(composite); return composite; } /** * Create the controls for creating a new relationships Model. * * @param parent the parent composite * @return the created composite */ private Composite createModelCreationComposite( Composite parent ) { // Set up Composite Composite nameComposite = new Composite(parent, SWT.NONE); GridLayout nameCompositeLayout = new GridLayout(); nameComposite.setLayout(nameCompositeLayout); nameCompositeLayout.numColumns = 3; nameCompositeLayout.marginWidth = 0; GridData nameCompositeGridData = new GridData(GridData.FILL_HORIZONTAL); nameCompositeGridData.horizontalIndent = 20; nameComposite.setLayoutData(nameCompositeGridData); setCreateControlsEnabled(false); return nameComposite; } @Override public Object[] getResult() { // if they created a new relational model, return it if (selectedEObject != null) { return new Object[] {selectedEObject}; } // if they selected an existing relational model, return it return null; } private void updateDialogMessage( String sMessage, boolean bIsError ) { int iStatusCode = IStatus.OK; if (bIsError) { iStatusCode = IStatus.ERROR; } IStatus status = new StatusInfo(PLUGIN_ID, iStatusCode, sMessage); updateStatus(status); } protected void registerControls() { // NO_UCD getTreeViewer().addSelectionChangedListener(this); } @Override public void selectionChanged( SelectionChangedEvent event ) { super.selectionChanged(event); IStructuredSelection sel = (IStructuredSelection)getTreeViewer().getSelection(); Object oSelection = sel.getFirstElement(); if (oSelection instanceof XmlDocument || oSelection instanceof XmlRoot) { selectedEObject = (EObject)oSelection; setCreateControlsEnabled(true); updateOKStatus(); } else { selectedEObject = null; updateDialogMessage(INVALID_SELECTION_MESSAGE, true); setCreateControlsEnabled(false); } } private void setCreateControlsEnabled( boolean b ) { } /* (non-Javadoc) * @see org.eclipse.ui.dialogs.ElementTreeSelectionDialog#createTreeViewer(org.eclipse.swt.widgets.Composite) */ @Override protected TreeViewer createTreeViewer( Composite parent ) { TreeViewer result = super.createTreeViewer(parent); // add a filter to remove closed projects result.addFilter(new ViewerFilter() { @Override public boolean select( Viewer viewer, Object parentElement, Object element ) { boolean result = true; if (element instanceof IProject) { IProject project = (IProject)element; if (!project.isOpen()) { result = false; } else { try { if (!project.hasNature(ModelerCore.NATURE_ID)) { result = false; } } catch (CoreException theException) { ModelerCore.Util.log(theException); result = false; } } } return result; } }); result.expandToLevel(2); return result; } @Override public boolean close() { getTreeViewer().removeSelectionChangedListener(this); return super.close(); } }