| /******************************************************************************* |
| * Copyright (c) 2010, 2012 Oracle. All rights reserved. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v1.0, which accompanies this distribution |
| * and is available at http://www.eclipse.org/legal/epl-v10.html. |
| * |
| * Contributors: |
| * Oracle - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.jpt.jpa.ui.internal.wizards; |
| |
| import org.eclipse.core.resources.IContainer; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.viewers.ITreeContentProvider; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.viewers.TreeSelection; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.jpt.common.core.resource.ProjectResourceLocator; |
| import org.eclipse.jpt.jpa.ui.JptJpaUiPlugin; |
| import org.eclipse.jpt.jpa.ui.internal.JptUiMessages; |
| import org.eclipse.jpt.jpa.ui.internal.wizards.orm.EmbeddedMappingFileWizard; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Tree; |
| import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; |
| import org.eclipse.ui.model.WorkbenchContentProvider; |
| import org.eclipse.ui.model.WorkbenchLabelProvider; |
| |
| public class SelectMappingFileDialog |
| extends ElementTreeSelectionDialog |
| { |
| protected final IProject project; |
| |
| protected Label messageLabel; |
| protected Tree treeWidget; |
| |
| |
| public SelectMappingFileDialog(Shell parent, IProject project) { |
| this(parent, project, new WorkbenchLabelProvider(), new WorkbenchContentProvider()); |
| } |
| |
| public SelectMappingFileDialog(Shell parent, IProject project, ILabelProvider labelProvider, ITreeContentProvider contentProvider) { |
| super(parent, labelProvider, contentProvider); |
| setAllowMultiple(false); |
| this.project = project; |
| } |
| |
| @Override |
| protected Control createDialogArea(Composite parent) { |
| Composite composite = (Composite) super.createDialogArea(parent); |
| Button newButton = new Button(composite, SWT.PUSH); |
| newButton.setText(JptUiMessages.SelectMappingFileDialog_newButton); |
| GridData browseButtonData = new GridData(GridData.HORIZONTAL_ALIGN_END); |
| newButton.setLayoutData(browseButtonData); |
| newButton.setToolTipText(JptUiMessages.SelectMappingFileDialog_newButtonToolTip); |
| newButton.addSelectionListener(new SelectionListener() { |
| public void widgetSelected(SelectionEvent e) { |
| openNewMappingFileWizard(); |
| } |
| |
| public void widgetDefaultSelected(SelectionEvent e) { |
| widgetSelected(e); |
| } |
| }); |
| return composite; |
| } |
| |
| @Override |
| protected Label createMessageArea(Composite composite) { |
| this.messageLabel = super.createMessageArea(composite); |
| return this.messageLabel; |
| } |
| |
| @Override |
| protected TreeViewer createTreeViewer(Composite parent) { |
| TreeViewer treeViewer = super.createTreeViewer(parent); |
| this.treeWidget = treeViewer.getTree(); |
| return treeViewer; |
| } |
| |
| public String getChosenName() { |
| IPath resourcePath = null; |
| Object element = getFirstResult(); |
| if(element instanceof IContainer) { |
| resourcePath = ((IContainer) element).getFullPath(); |
| } else { |
| resourcePath = ((IFile) element).getFullPath(); |
| } |
| return this.getProjectResourceLocator().getRuntimePath(resourcePath).toString(); |
| } |
| |
| @Override |
| /* |
| * @see ElementTreeSelectionDialog#updateOKStatus(Composite) |
| */ |
| protected void updateOKStatus() { |
| super.updateOKStatus(); |
| TreeSelection selection = (TreeSelection)getTreeViewer().getSelection(); |
| IResource selectedResource = (IResource) selection.getFirstElement(); |
| if (selectedResource instanceof IFile) { |
| updateStatus(new Status(IStatus.OK, JptJpaUiPlugin.PLUGIN_ID, "")); //$NON-NLS-1$ |
| } |
| else { |
| updateStatus(new Status(IStatus.ERROR, JptJpaUiPlugin.PLUGIN_ID, "")); //$NON-NLS-1$ |
| } |
| } |
| |
| protected void openNewMappingFileWizard() { |
| IPath path = EmbeddedMappingFileWizard.createNewMappingFile(new StructuredSelection(this.project)); |
| updateDialog(path); |
| } |
| |
| protected void updateDialog(IPath path) { |
| if (path != null) { |
| //these are disabled if the tree is empty when the dialog is created. |
| this.messageLabel.setEnabled(true); |
| this.treeWidget.setEnabled(true); |
| IFile file = this.getProjectResourceLocator().getPlatformFile(path); |
| getTreeViewer().refresh(); |
| getTreeViewer().setSelection(new StructuredSelection(file), true); |
| } |
| } |
| |
| |
| |
| protected ProjectResourceLocator getProjectResourceLocator() { |
| return (ProjectResourceLocator) this.project.getAdapter(ProjectResourceLocator.class); |
| } |
| } |