Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Graphical Modeling Framework/Tips"
(→Image:New-small.gif Sharing EditingDomain instance across several diagrams) |
(→Image:New-small.gif Sharing single EditingDomain instance across several diagrams) |
||
Line 82: | Line 82: | ||
= [[Image:New-small.gif]] Sharing single EditingDomain instance across several diagrams = | = [[Image:New-small.gif]] Sharing single EditingDomain instance across several diagrams = | ||
+ | |||
+ | Generated code always creates new (own) instance of EditingDomain for each opened diagram editor. Since EditingDomain owns ResourceSet, different instances of domain model elements will be loaded for each opened diagram editor. Sometimes it is important to share the same domain model instances across several diagram editors (for example to get rid of synchronization problems). This leads us to the question of sharing same instance of EditingDomain across several generated diagram editors. Below you can find step by step description of necessary modifications you have to apply to the generated code. |
Revision as of 11:21, 26 October 2006
I find those tips useful:
Contents
Creating New Elements And Corresponding Views
DeviceEditPart selectedElement = ...; String compartemntsSemanticHint = NetworkVisualIDRegistry.getType(tests.mindmap.network.diagram.edit.parts.Device_ModulesCompartmentEditPart.VISUAL_ID); Device_ModulesCompartmentEditPart modulesCompartment = (Device_ModulesCompartmentEditPart)selectedElement.getChildBySemanticHint(compartemntsSemanticHint); IElementType type = NetworkElementTypes.Module_3001; ViewAndElementDescriptor viewDescriptor = new ViewAndElementDescriptor( new CreateElementRequestAdapter(new CreateElementRequest(type)), Node.class, ((IHintedType) type).getSemanticHint(), selectedElement.getDiagramPreferencesHint()); CreateViewAndElementRequest req = new CreateViewAndElementRequest(viewDescriptor); CompoundCommand cmd = new CompoundCommand("Create 10 modules"); for (int i=0; i<10; i++) { cmd.add(modulesCompartment.getCommand(req)); } selectedElement.getDiagramEditDomain().getDiagramCommandStack().execute(cmd);
Change Names Of Newly Created Elements
Collection results = DiagramCommandStack.getReturnValues(cmd); for (Object res: results) { if (res instanceof IAdaptable) { IAdaptable adapter = (IAdaptable) res; View view = (View) adapter.getAdapter(View.class); if (view != null) { Module newMod = (Module)view.getElement(); SetRequest reqSet = new SetRequest(selectedElement.getEditingDomain(), newMod, NetworkPackage.eINSTANCE.getNamedElement_Name(), "ModX"); SetValueCommand operation = new SetValueCommand(reqSet); selectedElement.getDiagramEditDomain().getDiagramCommandStack().execute(new ICommandProxy(operation)); } } }
Create New Elements Using RecordingCommand and CanonicalEditPolicies
final Device dev = (Device)((View)selectedElement.getModel()).getElement(); TransactionalEditingDomain editingDomain = selectedElement.getEditingDomain(); editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) { @SuppressWarnings("unchecked") protected void doExecute() { dev.setName("Morda13"); for (int i = 0; i < 5; i++) { Module newMod = NetworkFactory.eINSTANCE.createModule(); newMod.setName("X26 - " + i); dev.getModules().add(newMod); } } });
Remove Property Sheet altogether
Add next method to the generated diagram editor class (usually <ModelName>DiagramEditor)
public Object getAdapter(Class type) { if (type == IPropertySheetPage.class) { return null; } return super.getAdapter(type); }
Sharing single EditingDomain instance across several diagrams
Generated code always creates new (own) instance of EditingDomain for each opened diagram editor. Since EditingDomain owns ResourceSet, different instances of domain model elements will be loaded for each opened diagram editor. Sometimes it is important to share the same domain model instances across several diagram editors (for example to get rid of synchronization problems). This leads us to the question of sharing same instance of EditingDomain across several generated diagram editors. Below you can find step by step description of necessary modifications you have to apply to the generated code.