Connection containement reference

18 views
Skip to first unread message

Simone Di Cola

unread,
Jun 16, 2014, 7:01:39 AM6/16/14
to spray...@googlegroups.com
Hi Joerg, 
 I have a question about this bit: 
public Connection create(ICreateConnectionContext context) {
        // get EClasses which should be connected
       final uk.man.xman.xcore.Connector source = getConnector(sourceAnchor);
       final uk.man.xman.xcore.Composable target = getComposable(targetAnchor);
       // containment reference is not a feature of source
       final uk.man.xman.xcore.CompositeComponent container = org.eclipse.xtext.EcoreUtil2.getContainerOfType(source, uk.man.xman.xcore.CompositeComponent.class);
        // add the element to containment referenc
        if(container !=null) container.getConnections().add(eReference);
                 
                   [...]


I do not understand why the root element becomes the containment of the connection. I've added this code to set the source as containment:

        if(source instanceof AdapterConnector){
        ((AdapterConnector)source).setConnection(eReference);
        }
        else{
        ((CompositionConnector) source).getConnections().add(eReference);
        }


But I've several problems when I delete the object. Am I missing something?

Thanks for your help
Simone
   

Simone Di Cola

unread,
Jun 16, 2014, 7:10:50 AM6/16/14
to spray...@googlegroups.com
In particular I think my problems are somehow related to the comment:
       
// containment reference is not a feature of source

Do I have to set something in the spray file? 

Simone

Simone Di Cola

unread,
Jun 16, 2014, 7:26:24 AM6/16/14
to spray...@googlegroups.com
This is the error I got when I try to delete the object (source)

java.lang.IllegalStateException: There is a cycle in the containment hierarchy of uk.man.xman.xcore.impl.GuardImpl@1f69f06 

Simone Di Cola

unread,
Jun 16, 2014, 7:42:24 AM6/16/14
to spray...@googlegroups.com
To make things a little bit clearer, this is the interested bit of my Xcore model:

abstract class AdapterConnector extends Connector{
String conditionalStatement
contains Input [1..1] input
contains Connection[1..1] connection
}

class Loop extends AdapterConnector{
LoopType loopType
}

class Guard extends AdapterConnector{ 
}

interface Connection{
}

class CoordinationConnection extends Connection{
String order
String condition
contains Connector source
contains Composable  target
}


so Guard (or loop) contains a connection.

This is what I got inside the spray file:

class Guard icon "connectors/adapter/guard.png"{
shape GuardShape{
showedName into guardLabel
reference input into inputParameter 
}
    behavior{
 create into composables  palette "Connectors" 
}
}

class CoordinationConnection icon "connection16.gif"{
connection CoordinationConnection
{
from source; 
to target;
}
behavior {
   create into connections palette "Connections"
}
}

is there a way to say: the create  CoordinationConnection goes inside a Guard (or Loop)?

Simone

Jörg Reichert

unread,
Jun 16, 2014, 8:08:44 AM6/16/14
to spray...@googlegroups.com
Hi Simone,

Spray currently lacks the concept of connection compartments. So it's assumed that all connection types are contained directly by the model root and then only be referenced by the actual connected elements. Sorry for this inconvenience.
There is already an open issue for that: http://code.google.com/a/eclipselabs.org/p/spray/issues/detail?id=235

So when you adapt the code you have to consider all the places where this may have implications. E.g. when deleting an EObject that contains an connection the connection is also deleted and this might be a problem,
when the other end holds still a reference to that connection. So have to take care on your own to properly dereference before deleting this.

The exception you got stems from here
http://eclipse-emf.sourcearchive.com/documentation/2.5.0-1/classorg_1_1eclipse_1_1emf_1_1ecore_1_1util_1_1EcoreUtil_7ec9530bb63425bc53e1958b1acf3a99.html
It seems your code tried set an EObject as its own parent.

Best regards,
Joerg
--
Sie erhalten diese Nachricht, weil Sie in Google Groups E-Mails von der Gruppe "spray-user" abonniert haben.
Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an spray-users...@googlegroups.com.
Weitere Optionen finden Sie unter https://groups.google.com/d/optout.

Simone Di Cola

unread,
Jun 16, 2014, 8:15:24 AM6/16/14
to spray...@googlegroups.com
MAay Many thanks Joerg :) 
       final uk....CompositeComponentmanxmanxcore container = org.eclipse.xtext.EcoreUtil2.getContainerOfType(source, uk.man.xman.xcore.CompositeComponent.class);
        // add the element to containment referenc
        if(container !=null) container.getConnections().add(eReference);
                 
                   [...]


I do not understand why the root element becomes the containment of the connection. I've added this code to set the source as containment:

        if(source instanceof AdapterConnector){
        ((AdapterConnector)source).setConnection(eReference);
        }
        else{
        ((CompositionConnector) source).getConnections().add(eReference);
        }


But I've several problems when I delete the object. Am I missing something?

Thanks for your help
Simone
   

Simone Di Cola

unread,
Jun 16, 2014, 9:59:25 AM6/16/14
to spray...@googlegroups.com
I'm getting this strange error when I try to save a diagram:

org.eclipse.emf.ecore.resource.Resource$IOWrappedException: The object 'uk.man.xman.xcore.impl.ComponentInstanceImpl@1a63c70 (name: dasdada)' is not contained in a resource.


Any idea?

Simone Di Cola

unread,
Jun 16, 2014, 10:07:59 AM6/16/14
to spray...@googlegroups.com
Restarting Eclipse did the trick. But now is even more interesting:

Exception in thread "[Timer] - Main Queue Handler" java.lang.OutOfMemoryError: Java heap spac
e
at java.util.Arrays.copyOfRange(Unknown Source
)
at java.lang.String.<init>(Unknown Source
)
at java.lang.StringBuffer.toString(Unknown Source)
at org.eclipse.equinox.internal.util.impl.tpt.threadpool.ThreadPoolFactoryImpl.execute0(ThreadPoolFactoryImpl.java:94)
at org.eclipse.equinox.internal.util.impl.tpt.timer.TimerImpl.run(TimerImpl.java:110)
at java.lang.Thread.run(Unknown Source)

!ENTRY org.eclipse.mylyn.monitor.ui 4 0 2014-06-16 15:09:07.215
!MESSAGE An error occured while processing events
!STACK 0
java.lang.OutOfMemoryError: Java heap space
at org.eclipse.core.internal.jobs.DeadlockDetector.reduceGraph(DeadlockDetector.java:509)
at org.eclipse.core.internal.jobs.DeadlockDetector.lockReleased(DeadlockDetector.java:353)
at org.eclipse.core.internal.jobs.LockManager.removeLockThread(LockManager.java:269)
at org.eclipse.core.internal.jobs.OrderedLock.setCurrentOperationThread(OrderedLock.java:266)
at org.eclipse.core.internal.jobs.OrderedLock.doRelease(OrderedLock.java:195)
at org.eclipse.core.internal.jobs.OrderedLock.release(OrderedLock.java:246)
at org.eclipse.mylyn.internal.context.core.InteractionContextManager.getActivityMetaContext(InteractionContextManager.java:593)
at org.eclipse.mylyn.internal.context.core.InteractionContextManager.processActivityMetaContextEvent(InteractionContextManager.java:1166)
at org.eclipse.mylyn.internal.monitor.ui.ActivityContextManager.processWorkbenchEvent(ActivityContextManager.java:192)
at org.eclipse.mylyn.internal.monitor.ui.ActivityContextManager.addMonitoredActivityTime(ActivityContextManager.java:181)
at org.eclipse.mylyn.internal.monitor.ui.ActivityContextManager.access$0(ActivityContextManager.java:165)
at org.eclipse.mylyn.internal.monitor.ui.ActivityContextManager$2.addMonitoredActivityTime(ActivityContextManager.java:80)
at org.eclipse.mylyn.internal.monitor.ui.CheckActivityJob.run(CheckActivityJob.java:125)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

!ENTRY org.eclipse.graphiti.ui 0 0 2014-06-16 15:09:07.221
!MESSAGE The following resources could not be saved:
URI: platform:/resource/test/components/composite/dasdsad.diagram, cause: 
java.lang.OutOfMemoryError: Java heap space
at java.lang.StringBuilder.toString(Unknown Source)
at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eURIFragmentSegment(BasicEObjectImpl.java:369)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.getURIFragment(ResourceImpl.java:674)
at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.getURIFragment(XMLResourceImpl.java:598)
at org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl.getURIFragment(XMLHelperImpl.java:712)
at org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl.getIDREF(XMLHelperImpl.java:747)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveIDRefMany(XMLSaveImpl.java:2018)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1365)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1219)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElementID(XMLSaveImpl.java:2711)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElement(XMLSaveImpl.java:1176)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElement(XMLSaveImpl.java:1037)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveContainedSingle(XMLSaveImpl.java:2398)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1542)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1219)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElementID(XMLSaveImpl.java:2711)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElement(XMLSaveImpl.java:1176)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElement(XMLSaveImpl.java:1037)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveContainedMany(XMLSaveImpl.java:2412)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1548)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1219)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElementID(XMLSaveImpl.java:2711)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.writeTopObject(XMLSaveImpl.java:678)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.traverse(XMLSaveImpl.java:586)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.save(XMLSaveImpl.java:251)
at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doSave(XMLResourceImpl.java:365)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:1430)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.saveOnlyIfChangedWithMemoryBuffer(ResourceImpl.java:1144)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:985)
at org.eclipse.graphiti.ui.internal.services.impl.EmfService$1$1.run(EmfService.java:268)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
at org.eclipse.graphiti.ui.internal.services.impl.EmfService$1.run(EmfService.java:279)

!STACK 0
java.lang.RuntimeException
at org.eclipse.graphiti.ui.internal.services.impl.EmfService.save(EmfService.java:288)
at org.eclipse.graphiti.ui.editor.DefaultPersistencyBehavior.save(DefaultPersistencyBehavior.java:281)
at org.eclipse.graphiti.ui.editor.DefaultPersistencyBehavior$1.run(DefaultPersistencyBehavior.java:250)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

!ENTRY org.eclipse.graphiti.ui 4 0 2014-06-16 15:09:07.223
!MESSAGE The following resources could not be saved:
URI: platform:/resource/test/components/composite/dasdsad.diagram, cause: 
java.lang.OutOfMemoryError: Java heap space
at java.lang.StringBuilder.toString(Unknown Source)
at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eURIFragmentSegment(BasicEObjectImpl.java:369)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.getURIFragment(ResourceImpl.java:674)
at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.getURIFragment(XMLResourceImpl.java:598)
at org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl.getURIFragment(XMLHelperImpl.java:712)
at org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl.getIDREF(XMLHelperImpl.java:747)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveIDRefMany(XMLSaveImpl.java:2018)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1365)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1219)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElementID(XMLSaveImpl.java:2711)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElement(XMLSaveImpl.java:1176)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElement(XMLSaveImpl.java:1037)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveContainedSingle(XMLSaveImpl.java:2398)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1542)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1219)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElementID(XMLSaveImpl.java:2711)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElement(XMLSaveImpl.java:1176)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElement(XMLSaveImpl.java:1037)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveContainedMany(XMLSaveImpl.java:2412)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1548)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveFeatures(XMLSaveImpl.java:1219)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.saveElementID(XMLSaveImpl.java:2711)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.writeTopObject(XMLSaveImpl.java:678)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.traverse(XMLSaveImpl.java:586)
at org.eclipse.emf.ecore.xmi.impl.XMLSaveImpl.save(XMLSaveImpl.java:251)
at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doSave(XMLResourceImpl.java:365)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:1430)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.saveOnlyIfChangedWithMemoryBuffer(ResourceImpl.java:1144)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.save(ResourceImpl.java:985)
at org.eclipse.graphiti.ui.internal.services.impl.EmfService$1$1.run(EmfService.java:268)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
at org.eclipse.graphiti.ui.internal.services.impl.EmfService$1.run(EmfService.java:279)

!STACK 0
java.lang.RuntimeException
at org.eclipse.graphiti.ui.internal.services.impl.EmfService.save(EmfService.java:288)
at org.eclipse.graphiti.ui.editor.DefaultPersistencyBehavior.save(DefaultPersistencyBehavior.java:281)
at org.eclipse.graphiti.ui.editor.DefaultPersistencyBehavior$1.run(DefaultPersistencyBehavior.java:250)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Reply all
Reply to author
Forward
0 new messages