Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.emf.refactor.comrel.diagram/src/comrel/diagram/part/ComrelElementChooserDialog.java')
-rw-r--r--org.eclipse.emf.refactor.comrel.diagram/src/comrel/diagram/part/ComrelElementChooserDialog.java403
1 files changed, 403 insertions, 0 deletions
diff --git a/org.eclipse.emf.refactor.comrel.diagram/src/comrel/diagram/part/ComrelElementChooserDialog.java b/org.eclipse.emf.refactor.comrel.diagram/src/comrel/diagram/part/ComrelElementChooserDialog.java
new file mode 100644
index 0000000..98ee37c
--- /dev/null
+++ b/org.eclipse.emf.refactor.comrel.diagram/src/comrel/diagram/part/ComrelElementChooserDialog.java
@@ -0,0 +1,403 @@
+/*
+ *
+ */
+package comrel.diagram.part;
+
+import java.util.Collections;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.common.util.WrappedException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.edit.provider.IWrapperItemProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+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.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+/**
+ * @generated
+ */
+public class ComrelElementChooserDialog extends Dialog {
+
+ /**
+ * @generated
+ */
+ private TreeViewer myTreeViewer;
+
+ /**
+ * @generated
+ */
+ private URI mySelectedModelElementURI;
+
+ /**
+ * @generated
+ */
+ private View myView;
+
+ /**
+ * @generated
+ */
+ private TransactionalEditingDomain myEditingDomain = GMFEditingDomainFactory.INSTANCE
+ .createEditingDomain();
+
+ /**
+ * @generated
+ */
+ public ComrelElementChooserDialog(Shell parentShell, View view) {
+ super(parentShell);
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ myView = view;
+ }
+
+ /**
+ * @generated
+ */
+ protected Control createDialogArea(Composite parent) {
+ Composite composite = (Composite) super.createDialogArea(parent);
+ getShell().setText(
+ Messages.ComrelElementChooserDialog_SelectModelElementTitle);
+ createModelBrowser(composite);
+ return composite;
+ }
+
+ /**
+ * @generated
+ */
+ protected Control createButtonBar(Composite parent) {
+ Control buttonBar = super.createButtonBar(parent);
+ setOkButtonEnabled(false);
+ return buttonBar;
+ }
+
+ /**
+ * @generated
+ */
+ private void createModelBrowser(Composite composite) {
+ myTreeViewer = new TreeViewer(composite, SWT.SINGLE | SWT.H_SCROLL
+ | SWT.V_SCROLL | SWT.BORDER);
+ GridData layoutData = new GridData(GridData.FILL_BOTH);
+ layoutData.heightHint = 300;
+ layoutData.widthHint = 300;
+ myTreeViewer.getTree().setLayoutData(layoutData);
+ myTreeViewer.setContentProvider(new ModelElementsTreeContentProvider());
+ myTreeViewer.setLabelProvider(new ModelElementsTreeLabelProvider());
+ myTreeViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
+ myTreeViewer.addFilter(new ModelFilesFilter());
+ myTreeViewer.addSelectionChangedListener(new OkButtonEnabler());
+ }
+
+ /**
+ * @generated
+ */
+ private void setOkButtonEnabled(boolean enabled) {
+ getButton(IDialogConstants.OK_ID).setEnabled(enabled);
+ }
+
+ /**
+ * @generated
+ */
+ private boolean isValidModelFile(IFile file) {
+ String fileExtension = file.getFullPath().getFileExtension();
+ return "comrel".equals(fileExtension); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ public URI getSelectedModelElementURI() {
+ return mySelectedModelElementURI;
+ }
+
+ /**
+ * @generated
+ */
+ public int open() {
+ int result = super.open();
+ for (Resource resource : myEditingDomain.getResourceSet()
+ .getResources()) {
+ resource.unload();
+ }
+ myEditingDomain.dispose();
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private class ModelElementsTreeContentProvider implements
+ ITreeContentProvider {
+
+ /**
+ * @generated
+ */
+ private ITreeContentProvider myWorkbenchContentProvider = new WorkbenchContentProvider();
+
+ /**
+ * @generated
+ */
+ private AdapterFactoryContentProvider myAdapterFctoryContentProvier = new AdapterFactoryContentProvider(
+ ComrelDiagramEditorPlugin.getInstance()
+ .getItemProvidersAdapterFactory());
+
+ /**
+ * @generated
+ */
+ public Object[] getChildren(Object parentElement) {
+ Object[] result = myWorkbenchContentProvider
+ .getChildren(parentElement);
+ if (result != null && result.length > 0) {
+ return result;
+ }
+ if (parentElement instanceof IFile) {
+ IFile modelFile = (IFile) parentElement;
+ IPath resourcePath = modelFile.getFullPath();
+ ResourceSet resourceSet = myEditingDomain.getResourceSet();
+ try {
+ Resource modelResource = resourceSet.getResource(
+ URI.createPlatformResourceURI(
+ resourcePath.toString(), true), true);
+ return myAdapterFctoryContentProvier
+ .getChildren(modelResource);
+ } catch (WrappedException e) {
+ ComrelDiagramEditorPlugin
+ .getInstance()
+ .logError(
+ "Unable to load resource: " + resourcePath.toString(), e); //$NON-NLS-1$
+ }
+ return Collections.EMPTY_LIST.toArray();
+ }
+ return myAdapterFctoryContentProvier.getChildren(parentElement);
+ }
+
+ /**
+ * @generated
+ */
+ public Object getParent(Object element) {
+ Object parent = myWorkbenchContentProvider.getParent(element);
+ if (parent != null) {
+ return parent;
+ }
+ if (element instanceof EObject) {
+ EObject eObject = (EObject) element;
+ if (eObject.eContainer() == null
+ && eObject.eResource().getURI().isFile()) {
+ String path = eObject.eResource().getURI().path();
+ return ResourcesPlugin.getWorkspace().getRoot()
+ .getFileForLocation(new Path(path));
+ }
+ return myAdapterFctoryContentProvier.getParent(eObject);
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean hasChildren(Object element) {
+ if (element instanceof IFile) {
+ return isValidModelFile((IFile) element);
+ }
+ return myWorkbenchContentProvider.hasChildren(element)
+ || myAdapterFctoryContentProvier.hasChildren(element);
+ }
+
+ /**
+ * @generated
+ */
+ public Object[] getElements(Object inputElement) {
+ Object[] elements = myWorkbenchContentProvider
+ .getElements(inputElement);
+ return elements;
+ }
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ myWorkbenchContentProvider.dispose();
+ myAdapterFctoryContentProvier.dispose();
+ }
+
+ /**
+ * @generated
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ myWorkbenchContentProvider.inputChanged(viewer, oldInput, newInput);
+ myAdapterFctoryContentProvier.inputChanged(viewer, oldInput,
+ newInput);
+ }
+
+ }
+
+ /**
+ * @generated
+ */
+ private class ModelElementsTreeLabelProvider implements ILabelProvider {
+
+ /**
+ * @generated
+ */
+ private WorkbenchLabelProvider myWorkbenchLabelProvider = new WorkbenchLabelProvider();
+
+ /**
+ * @generated
+ */
+ private AdapterFactoryLabelProvider myAdapterFactoryLabelProvider = new AdapterFactoryLabelProvider(
+ ComrelDiagramEditorPlugin.getInstance()
+ .getItemProvidersAdapterFactory());
+
+ /**
+ * @generated
+ */
+ public Image getImage(Object element) {
+ Image result = myWorkbenchLabelProvider.getImage(element);
+ return result != null ? result : myAdapterFactoryLabelProvider
+ .getImage(element);
+ }
+
+ /**
+ * @generated
+ */
+ public String getText(Object element) {
+ String result = myWorkbenchLabelProvider.getText(element);
+ return result != null && result.length() > 0 ? result
+ : myAdapterFactoryLabelProvider.getText(element);
+ }
+
+ /**
+ * @generated
+ */
+ public void addListener(ILabelProviderListener listener) {
+ myWorkbenchLabelProvider.addListener(listener);
+ myAdapterFactoryLabelProvider.addListener(listener);
+ }
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ myWorkbenchLabelProvider.dispose();
+ myAdapterFactoryLabelProvider.dispose();
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return myWorkbenchLabelProvider.isLabelProperty(element, property)
+ || myAdapterFactoryLabelProvider.isLabelProperty(element,
+ property);
+ }
+
+ /**
+ * @generated
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ myWorkbenchLabelProvider.removeListener(listener);
+ myAdapterFactoryLabelProvider.removeListener(listener);
+ }
+
+ }
+
+ /**
+ * @generated
+ */
+ private class ModelFilesFilter extends ViewerFilter {
+
+ /**
+ * @generated
+ */
+ public boolean select(Viewer viewer, Object parentElement,
+ Object element) {
+ if (element instanceof IContainer) {
+ return true;
+ }
+ if (element instanceof IFile) {
+ IFile file = (IFile) element;
+ return isValidModelFile(file);
+ }
+ return true;
+ }
+
+ }
+
+ /**
+ * @generated
+ */
+ private class OkButtonEnabler implements ISelectionChangedListener {
+
+ /**
+ * @generated
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ if (event.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection selection = (IStructuredSelection) event
+ .getSelection();
+ if (selection.size() == 1) {
+ Object selectedElement = selection.getFirstElement();
+ if (selectedElement instanceof IWrapperItemProvider) {
+ selectedElement = ((IWrapperItemProvider) selectedElement)
+ .getValue();
+ }
+ if (selectedElement instanceof FeatureMap.Entry) {
+ selectedElement = ((FeatureMap.Entry) selectedElement)
+ .getValue();
+ }
+ if (selectedElement instanceof EObject) {
+ EObject selectedModelElement = (EObject) selectedElement;
+ setOkButtonEnabled(ViewService
+ .getInstance()
+ .provides(
+ Node.class,
+ new EObjectAdapter(selectedModelElement),
+ myView,
+ null,
+ ViewUtil.APPEND,
+ true,
+ ComrelDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT));
+ mySelectedModelElementURI = EcoreUtil
+ .getURI(selectedModelElement);
+ return;
+ }
+ }
+ }
+ mySelectedModelElementURI = null;
+ setOkButtonEnabled(false);
+ }
+
+ }
+
+}

Back to the top