diff options
author | glefur | 2010-11-18 14:29:36 +0000 |
---|---|---|
committer | glefur | 2010-11-18 14:29:36 +0000 |
commit | 6f02870366f27c6fda9b044f050d6c0c075aa182 (patch) | |
tree | 98664aa01a47bcaaa79ee7c09f5781fd946e7228 /plugins | |
parent | 49296e0058529dcf3034e0246b9834b03b858121 (diff) | |
download | org.eclipse.eef-6f02870366f27c6fda9b044f050d6c0c075aa182.tar.gz org.eclipse.eef-6f02870366f27c6fda9b044f050d6c0c075aa182.tar.xz org.eclipse.eef-6f02870366f27c6fda9b044f050d6c0c075aa182.zip |
FIXED: wizard editing domain shared bug
Diffstat (limited to 'plugins')
7 files changed, 49 insertions, 18 deletions
diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/impl/components/SinglePartPropertiesEditingComponent.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/impl/components/SinglePartPropertiesEditingComponent.java index 03f6acbaa..39d00e851 100644 --- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/impl/components/SinglePartPropertiesEditingComponent.java +++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/impl/components/SinglePartPropertiesEditingComponent.java @@ -20,11 +20,6 @@ import org.eclipse.emf.eef.runtime.impl.services.PropertiesEditionPartProviderSe * */ public abstract class SinglePartPropertiesEditingComponent extends StandardPropertiesEditionComponent { - - /** - * Editing context - */ - protected PropertiesEditingContext editingContext; /** * EObject to edit diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/impl/components/StandardPropertiesEditionComponent.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/impl/components/StandardPropertiesEditionComponent.java index 4d90a1cb3..6b7622ba3 100644 --- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/impl/components/StandardPropertiesEditionComponent.java +++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/impl/components/StandardPropertiesEditionComponent.java @@ -27,6 +27,7 @@ import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionEvent; import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionListener; import org.eclipse.emf.eef.runtime.api.notify.PropertiesEditingSemanticLister; import org.eclipse.emf.eef.runtime.api.parts.IPropertiesEditionPart; +import org.eclipse.emf.eef.runtime.context.PropertiesEditingContext; import org.eclipse.emf.eef.runtime.impl.command.StandardEditingCommand; import org.eclipse.emf.eef.runtime.impl.notify.PropertiesValidationEditionEvent; import org.eclipse.emf.eef.runtime.impl.utils.StringTools; @@ -60,6 +61,11 @@ public abstract class StandardPropertiesEditionComponent implements IPropertiesE * the job that will fire the property changed event */ protected FirePropertiesChangedJob firePropertiesChangedJob; + + /** + * Editing context + */ + protected PropertiesEditingContext editingContext; /** * the editing mode @@ -83,7 +89,7 @@ public abstract class StandardPropertiesEditionComponent implements IPropertiesE * int, org.eclipse.emf.ecore.EObject) */ public void initPart(Object key, int kind, EObject element) { - this.initPart(key, kind, element, element.eResource().getResourceSet()); + this.initPart(key, kind, element, editingContext.getResourceSet()); } /** diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/policies/impl/CreateEditingPolicy.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/policies/impl/CreateEditingPolicy.java index ab3a74280..5de73cd63 100644 --- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/policies/impl/CreateEditingPolicy.java +++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/policies/impl/CreateEditingPolicy.java @@ -3,8 +3,11 @@ */ package org.eclipse.emf.eef.runtime.policies.impl; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.change.ChangeDescription; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.eef.runtime.context.impl.EReferencePropertiesEditionContext; import org.eclipse.emf.eef.runtime.policies.PropertiesEditingPolicyWithResult; import org.eclipse.emf.eef.runtime.ui.utils.EditingUtils; @@ -33,13 +36,23 @@ public class CreateEditingPolicy implements PropertiesEditingPolicyWithResult { * @see org.eclipse.emf.eef.runtime.policies.PropertiesEditingPolicy#execute() */ public void execute() { - PropertiesEditionWizard wizard = new PropertiesEditionWizard(null, editionContext.getAdapterFactory(), editionContext.getEReference()); + EClassifier eType = editionContext.getEReference().getEType(); + PropertiesEditionWizard wizard; + if (eType instanceof EClass && ((EClass)eType).isAbstract()) { + wizard = new PropertiesEditionWizard(null, editionContext.getAdapterFactory(), editionContext.getEReference()); + } + else { + EObject create = EcoreUtil.create((EClass) eType); + wizard = new PropertiesEditionWizard(editionContext, editionContext.getAdapterFactory(), create); + } WizardDialog wDialog = new WizardDialog(EditingUtils.getShell(), wizard); int executionResult = wDialog.open(); result = wizard.getEObject(); ChangeDescription change = editionContext.getChangeRecorder().endRecording(); - if (executionResult == Window.CANCEL) + if (executionResult == Window.CANCEL) { change.applyAndReverse(); + result = null; + } } /** diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/editors/pages/EEFDetailsPage.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/editors/pages/EEFDetailsPage.java index 807332753..3b1d946a3 100644 --- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/editors/pages/EEFDetailsPage.java +++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/editors/pages/EEFDetailsPage.java @@ -17,6 +17,7 @@ import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.eef.runtime.api.component.IPropertiesEditionComponent; import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionEvent; import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionListener; +import org.eclipse.emf.eef.runtime.context.impl.DomainPropertiesEditionContext; import org.eclipse.emf.eef.runtime.ui.layout.EEFFormLayoutFactory; import org.eclipse.emf.eef.runtime.ui.viewers.PropertiesEditionContentProvider; import org.eclipse.emf.eef.runtime.ui.viewers.PropertiesEditionMessageManager; @@ -94,7 +95,7 @@ public class EEFDetailsPage extends AbstractFormPart implements IDetailsPage, IP if (eObject != null) { if (viewer.getToolkit() == null) viewer.setToolkit(toolkit); - viewer.setInput(eObject); + viewer.setInput(new DomainPropertiesEditionContext(null, null, editingDomain, adapterFactory, eObject)); viewer.addPropertiesListener(this); } } diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/editors/pages/EEFStandardFormPage.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/editors/pages/EEFStandardFormPage.java index 72e1603f8..c09d33214 100644 --- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/editors/pages/EEFStandardFormPage.java +++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/editors/pages/EEFStandardFormPage.java @@ -14,6 +14,7 @@ import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.eef.runtime.api.component.IPropertiesEditionComponent; +import org.eclipse.emf.eef.runtime.context.impl.DomainPropertiesEditionContext; import org.eclipse.emf.eef.runtime.ui.layout.EEFFormLayoutFactory; import org.eclipse.emf.eef.runtime.ui.viewers.PropertiesEditionContentProvider; import org.eclipse.emf.eef.runtime.ui.viewers.PropertiesEditionViewer; @@ -105,7 +106,7 @@ public class EEFStandardFormPage extends FormPage { * the input of the page */ public void setInput(EObject newEObject) { - viewer.setInput(newEObject); + viewer.setInput(new DomainPropertiesEditionContext(null, null, editingDomain, adapterFactory, newEObject)); } /** diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/viewers/PropertiesEditionContentProvider.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/viewers/PropertiesEditionContentProvider.java index b44122cb4..37e835590 100644 --- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/viewers/PropertiesEditionContentProvider.java +++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/viewers/PropertiesEditionContentProvider.java @@ -19,6 +19,7 @@ import org.eclipse.emf.eef.runtime.api.component.IPropertiesEditionComponent; import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionEvent; import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionListener; import org.eclipse.emf.eef.runtime.api.parts.IPropertiesEditionPart; +import org.eclipse.emf.eef.runtime.context.PropertiesEditingContext; import org.eclipse.emf.eef.runtime.context.impl.DomainPropertiesEditionContext; import org.eclipse.emf.eef.runtime.context.impl.EObjectPropertiesEditionContext; import org.eclipse.emf.eef.runtime.impl.services.PropertiesContextService; @@ -82,18 +83,31 @@ public class PropertiesEditionContentProvider implements IStructuredContentProvi PropertiesContextService.getInstance().pop(); propertiesEditionComponent.dispose(); } - PropertiesEditingProvider propertiesEditionProvider = (PropertiesEditingProvider) adapterFactory.adapt((EObject)newInput, PropertiesEditingProvider.class); - if (propertiesEditionProvider != null) { + EObject eObject = null; + PropertiesEditingContext context = null; + if (newInput instanceof EObject) { + eObject = (EObject)newInput; if (mode == IPropertiesEditionComponent.LIVE_MODE) { - this.propertiesEditionComponent = propertiesEditionProvider.getPropertiesEditingComponent(new DomainPropertiesEditionContext(null, null, editingDomain, adapterFactory, (EObject)newInput), mode); - propertiesEditionComponent.setLiveEditingDomain(editingDomain); + context = new DomainPropertiesEditionContext(null, null, editingDomain, adapterFactory, eObject); } else if (mode == IPropertiesEditionComponent.BATCH_MODE) { - this.propertiesEditionComponent = propertiesEditionProvider.getPropertiesEditingComponent(new EObjectPropertiesEditionContext(null, null, (EObject)newInput, adapterFactory), mode); + context = new EObjectPropertiesEditionContext(null, null, eObject, adapterFactory); + } + } else if (newInput instanceof EObjectPropertiesEditionContext) { + context = (PropertiesEditingContext) newInput; + eObject = context.getEObject(); + } + if (eObject != null) { + PropertiesEditingProvider propertiesEditionProvider = (PropertiesEditingProvider) adapterFactory.adapt(eObject, PropertiesEditingProvider.class); + if (propertiesEditionProvider != null) { + this.propertiesEditionComponent = propertiesEditionProvider.getPropertiesEditingComponent(context, mode); + if (mode == IPropertiesEditionComponent.LIVE_MODE) { + propertiesEditionComponent.setLiveEditingDomain(editingDomain); + } } } // FIXME: find a better way to manage the context - PropertiesContextService.getInstance().push((EObject)newInput, propertiesEditionComponent); + PropertiesContextService.getInstance().push(eObject, propertiesEditionComponent); } /** diff --git a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/wizards/PropertiesEditionWizard.java b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/wizards/PropertiesEditionWizard.java index 6b4e796c9..59e5dd4f5 100644 --- a/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/wizards/PropertiesEditionWizard.java +++ b/plugins/org.eclipse.emf.eef.runtime/src/org/eclipse/emf/eef/runtime/ui/wizards/PropertiesEditionWizard.java @@ -27,6 +27,7 @@ import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionEvent; import org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionListener; import org.eclipse.emf.eef.runtime.context.PropertiesEditingContext; import org.eclipse.emf.eef.runtime.context.impl.DomainPropertiesEditionContext; +import org.eclipse.emf.eef.runtime.context.impl.EObjectPropertiesEditionContext; import org.eclipse.emf.eef.runtime.impl.services.PropertiesContextService; import org.eclipse.emf.eef.runtime.impl.utils.EEFUtils; import org.eclipse.emf.eef.runtime.ui.utils.EEFRuntimeUIMessages; @@ -119,7 +120,7 @@ public class PropertiesEditionWizard extends Wizard { * @return the updated EObject. */ public EObject getEObject() { - return editingContext.getEObject(); + return eObject != null ? eObject : editingContext.getEObject(); } /** @@ -277,7 +278,7 @@ public class PropertiesEditionWizard extends Wizard { public void setInput(EObject eObject) { this.setTitle(eObject.eClass().getName()); this.setDescription(EEFRuntimeUIMessages.PropertiesEditionWizard_main_page_description + eObject.eClass().getName()); - viewer.setInput(eObject); + viewer.setInput(new EObjectPropertiesEditionContext(editingContext, null, eObject, adapterFactory)); viewer.addPropertiesListener(this); } |