Community
Participate
Working Groups
Hi, I have to work with aspect instances programmatically. Hereby, I create my aspect instances before I add the instances to the ConfModel. In my case, the aspect is represented by a more complicated meta model. So, when I have added an aspect instance to ConfModel, the ConfModel no longer can be persisted. I think, this is caused by wrong aspect instance IDs, which are created by the AspectFactoryImpl class. For each AspectInstance of the same type the method createAspectInstance(..) sets the same ID value via newAspectInstance.setId(aspect.getId()); In my case, this causes problems as EMF by default uses that ID for identifying reference paths. As IDs are not unique, reference paths can not be resolved which is causing an error. For me I solved the problem by changing newAspectInstance.setId(aspect.getId()); to newAspectInstance.setId(EcoreUtil.generateUUID()); This works fine for me and until now, I noticed no side effects. Best regards Benjamin Honke
Hi Benjamin I'ma fraid you should'nt have this problem, and your solution is not right. 1. in ConfMetaModel.ecore, aspect.id is not marked as an ID in its EMF definition, so should not have any constraint attached to it. Which version are you using, Helios ? Could you provide your model and conf model so we can have a look ? 2. An aspect instance's id tracks which aspect it is an instance of, so you should not generate it. For instance, in AspectEnrichedItemProviderAdapter.collectNewChildAspectDescriptors(), you can see how it is used to determine whether an aspect has already been instanciated (at least once) or not on a given model element : for (AspectInstance aspectInstance : AspectManager.INSTANCE.getAspectInstances(modelElement)) { if (aspect.getId().equals(aspectInstance.getId())) { alreadyInstanciated = true; I agree it would have best been named aspectId than id, but well... So with your change, some features don't work anymore, like single ("multiple==false") aspects. Regards, Marc
Created attachment 182281 [details] .workflow + workflow_conf Hi Marc, I attached the workflow and conf file which causes the follwoing UnresolvedReferenceException. For me the problem could be that all the reference paths '..//@aspectInstances[id='de.uni-augsburg.methodology-support.mcd.ActionGuideline']..' start equally. I'm using the Helios version. Regards, Benni 03.11.2010 11:32:05 org.eclipse.jwt.we.conf.model.resource.internal.ConfModelResourceManagerImpl handleResourceLoadingError SCHWERWIEGEND: Patchable (but won't try to patch) error loading conf model resource for ConfModel file platform:/resource/ShowCase/src/showcase/original.workflow_conf while looking for expected ConfModel of model platform:/resource/ShowCase/src/showcase/original.workflow org.eclipse.emf.ecore.xmi.UnresolvedReferenceException: Unresolved reference '//@aspectInstances[id='de.uni-augsburg.methodology-support.mcd.ActionGuideline']/@description/@guidelines.0/@edges.0'. (platform:/resource/ShowCase/src/showcase/original.workflow_conf, 98, 227) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleForwardReferences(XMLHandler.java:1154) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.endDocument(XMLHandler.java:1228) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endDocument(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:181) at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:180) at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1494) at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1282) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:255) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:270) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397) at org.eclipse.jwt.we.conf.model.resource.internal.ConfModelResourceManagerImpl.loadConfModel(ConfModelResourceManagerImpl.java:457) at org.eclipse.jwt.we.conf.model.resource.internal.ConfModelResourceManagerImpl.loadConfModelOfModel(ConfModelResourceManagerImpl.java:192) at org.eclipse.jwt.we.conf.model.aspects.internal.AspectManagerImpl.getConfModel(AspectManagerImpl.java:154) at org.eclipse.jwt.we.conf.model.aspects.internal.AspectManagerImpl.getConfModel(AspectManagerImpl.java:122) at org.eclipse.jwt.we.conf.model.aspects.internal.AspectManagerImpl.getAspectInstances(AspectManagerImpl.java:653) at org.eclipse.jwt.we.conf.edit.aspects.provider.AspectEnrichedItemProviderAdapter.getChildren(AspectEnrichedItemProviderAdapter.java:92) at org.eclipse.jwt.meta.model.core.provider.ModelElementItemProvider.getChildren(ModelElementItemProvider.java:399) at org.eclipse.emf.edit.provider.ItemProviderAdapter.getElements(ItemProviderAdapter.java:310) at org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider.getElements(AdapterFactoryContentProvider.java:160) at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:989) at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:703) at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:1332) at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:391) at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:896) at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:601) at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:801) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:778) at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:644) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:749) at org.eclipse.jface.viewers.AbstractTreeViewer.internalInitializeTree(AbstractTreeViewer.java:1492) at org.eclipse.jface.viewers.TreeViewer.internalInitializeTree(TreeViewer.java:833) at org.eclipse.jface.viewers.AbstractTreeViewer$5.run(AbstractTreeViewer.java:1476) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1422) at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:403) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1383) at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:1469) at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:274) at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1664) at org.eclipse.jwt.we.editors.pages.overviewPage.WEOverviewSheet.createConfigPage(WEOverviewSheet.java:740) at org.eclipse.jwt.we.editors.pages.overviewPage.WEOverviewSheet.<init>(WEOverviewSheet.java:252) at org.eclipse.jwt.we.editors.WEEditor.createPages(WEEditor.java:388) at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348) at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1254) at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1207) at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1606) at org.eclipse.ui.internal.PartStack.add(PartStack.java:497) at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103) at org.eclipse.ui.internal.PartStack.add(PartStack.java:483) at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112) at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63) at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225) at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213) at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:778) at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:677) at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:638) at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2860) at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2768) at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2760) at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2711) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2707) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2691) at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2682) at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:365) at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:168) at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:229) at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:208) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:274) at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:250) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionGroup.handleOpen(PackageExplorerActionGroup.java:373) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$4.open(PackageExplorerPart.java:526) at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:845) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:843) at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1131) at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1235) at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:264) at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:258) at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:298) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574) at org.eclipse.equinox.launcher.Main.run(Main.java:1407) at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Hi Benjamin Is it what you suggest in https://bugs.eclipse.org/bugs/show_bug.cgi?id=329262 ? (Then it'd be fine) Regards, Marc
Hi Marc, Unfortunately, this is not my point. The model element IDs are useful to work with them at runtime, e.g. for comparing or tracing objects (perhaps with the same name). The problem with AspectInstance IDs concerns the persistence mechanism of the ConfModel. If an AspectInstance ID is the same for more than one aspect instance, references within my aspect-oriented extension, a self-contained model, are wrong persisted. This means, references cannot be de-serialized/ instantiated. In my opinion, the XMIResourceFactory is not able to resolve the referenced objects, as their reference path is not unique. Best regards Benajmin (In reply to comment #3) > Hi Benjamin > > Is it what you suggest in > https://bugs.eclipse.org/bugs/show_bug.cgi?id=329262 ? > (Then it'd be fine) > > Regards, > Marc
Moved version to 1.1 since it still occurs.