Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc) » Transaction Questions
Transaction Questions [message #12360] |
Thu, 19 January 2006 11:55 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
Hi Christian,
I'm just evaluating the new Transaction API for use in my product.
Here are some questions:
1) Is it necessary that own ResourceSets implement IEditingDomainProvider to be used with TXEditingDomain?
2) Is a concurrent thread allowed to read (only!) the ResourceSet of the TXEditingDomain directly, for example to validate in background?
3) Where is the relation between the physical files in the workspace and their in memory representation, e.g. Resources in the ResourceSet? What shall an editor do when the user hits "Save"?
Cheers
/Eike
|
|
|
Re: Transaction Questions [message #12371 is a reply to message #12360] |
Thu, 19 January 2006 12:51 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
I'm just about to analyze your Transaction-related changes to the EXTLibraryEditor.
It would be easier, if you annotated all your changes with @generated NOT (or @ADDED).
Btw. I had to comment out the following in ResourceLoadedListener
IEditorReference[] editors = page.findEditors(
new FileEditorInput(file),
" org.eclipse.emf.workbench.examples.extlibrary.presentation.E XTLibraryEditorID ", //$NON-NLS-1$
IWorkbenchPage.MATCH_ID | IWorkbenchPage.MATCH_INPUT);
page.closeEditors(editors, false);
MATCH_ID and MATCH_INPUT can't be resolved.
Cheers
/Eike
Eike Stepper schrieb:
> Hi Christian,
>
> I'm just evaluating the new Transaction API for use in my product.
> Here are some questions:
>
> 1) Is it necessary that own ResourceSets implement
> IEditingDomainProvider to be used with TXEditingDomain?
>
> 2) Is a concurrent thread allowed to read (only!) the ResourceSet of the
> TXEditingDomain directly, for example to validate in background?
>
> 3) Where is the relation between the physical files in the workspace and
> their in memory representation, e.g. Resources in the ResourceSet? What
> shall an editor do when the user hits "Save"?
>
> Cheers
> /Eike
|
|
|
Re: Transaction Questions [message #12379 is a reply to message #12360] |
Thu, 19 January 2006 13:38 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Hi, Eike,
See responses in-line, below.
Cheers,
Christian
Eike Stepper wrote:
> Hi Christian,
>
> I'm just evaluating the new Transaction API for use in my product.
> Here are some questions:
>
> 1) Is it necessary that own ResourceSets implement IEditingDomainProvider
> to be used with TXEditingDomain?
No. The TXEditingDomain.Factory links the resource set to its editing
domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
method does not require the IEditingDomainProvider interface. However, if
you do implement that interface for some other reason, then you will need
to ensure that it is consistent with what the factory thinks the
association is.
>
> 2) Is a concurrent thread allowed to read (only!) the ResourceSet of the
> TXEditingDomain directly, for example to validate in background?
I don't understand your question. A thread may actually read multiple
resource sets in different editing domains, but then you would need to be
wary of deadlocks (perhaps by implementing some kind of domain ordering).
Note that the Transaction API doesn't actually implement concurrency as
such; multiple "concurrent" readers of a resource set must cooperatively
yield read access to others. And write access is exclusive of all readers,
yielding or otherwise.
>
> 3) Where is the relation between the physical files in the workspace and
> their in memory representation, e.g. Resources in the ResourceSet? What
> shall an editor do when the user hits "Save"?
The WorkspaceSynchronizer class can provider the IResource representing an
EMF Resource. As you have probably seen already (indicated by your other
post), the example editor uses this in determining when it needs to refresh
from disk.
>
> Cheers
> /Eike
|
|
|
Re: Transaction Questions [message #12388 is a reply to message #12371] |
Thu, 19 January 2006 13:41 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Hi, Eike,
Marking the changes with some kind of comment is a good idea. Raise a
bugzilla and I'll see to it!
Regarding the code that you had to comment out: you need the M4 or later
version of Eclipse 3.2. This new findEditors() method is more correct than
the older simple editor-input-based findEditor() because it considers the
editor type as well, so that we do not accidentally close (e.g.) a text
editor.
Cheers,
Christian
Eike Stepper wrote:
> I'm just about to analyze your Transaction-related changes to the
> EXTLibraryEditor. It would be easier, if you annotated all your changes
> with @generated NOT (or @ADDED).
>
> Btw. I had to comment out the following in ResourceLoadedListener
>
> IEditorReference[] editors = page.findEditors(
> new FileEditorInput(file),
>
" org.eclipse.emf.workbench.examples.extlibrary.presentation.E XTLibraryEditorID ",
> //$NON-NLS-1$ IWorkbenchPage.MATCH_ID | IWorkbenchPage.MATCH_INPUT);
> page.closeEditors(editors, false);
>
> MATCH_ID and MATCH_INPUT can't be resolved.
>
> Cheers
> /Eike
>
>
>
> Eike Stepper schrieb:
>> Hi Christian,
>>
>> I'm just evaluating the new Transaction API for use in my product.
>> Here are some questions:
>>
>> 1) Is it necessary that own ResourceSets implement
>> IEditingDomainProvider to be used with TXEditingDomain?
>>
>> 2) Is a concurrent thread allowed to read (only!) the ResourceSet of the
>> TXEditingDomain directly, for example to validate in background?
>>
>> 3) Where is the relation between the physical files in the workspace and
>> their in memory representation, e.g. Resources in the ResourceSet? What
>> shall an editor do when the user hits "Save"?
>>
>> Cheers
>> /Eike
|
|
|
Re: Transaction Questions [message #14466 is a reply to message #12388] |
Thu, 19 January 2006 22:20 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
Christian W. Damus schrieb:
> Hi, Eike,
>
> Marking the changes with some kind of comment is a good idea. Raise a
> bugzilla and I'll see to it!
I filed https://bugs.eclipse.org/bugs/show_bug.cgi?id=124558
In the context of the generated editor the following bugzilla might also be interesting:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470
> Regarding the code that you had to comment out: you need the M4 or later
> version of Eclipse 3.2. This new findEditors() method is more correct than
> the older simple editor-input-based findEditor() because it considers the
> editor type as well, so that we do not accidentally close (e.g.) a text
> editor.
I see. I've had some problems with M4 and switched back to M3.
I'll try newer I-builds...
Thanks
/Eike
|
|
|
Re: Transaction Questions [message #14496 is a reply to message #12379] |
Thu, 19 January 2006 22:50 |
Eclipse User |
|
|
|
Originally posted by: stepper.sympedia.de
Christian W. Damus schrieb:
> Hi, Eike,
>
> See responses in-line, below.
>
> Cheers,
>
> Christian
>
>
> Eike Stepper wrote:
>
>
>>Hi Christian,
>>
>>I'm just evaluating the new Transaction API for use in my product.
>>Here are some questions:
>>
>>1) Is it necessary that own ResourceSets implement IEditingDomainProvider
>>to be used with TXEditingDomain?
>
>
> No. The TXEditingDomain.Factory links the resource set to its editing
> domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
> method does not require the IEditingDomainProvider interface. However, if
> you do implement that interface for some other reason, then you will need
> to ensure that it is consistent with what the factory thinks the
> association is.
I see. That is a nicer solution than EMF's own one ;-)
>>3) Where is the relation between the physical files in the workspace and
>>their in memory representation, e.g. Resources in the ResourceSet? What
>>shall an editor do when the user hits "Save"?
>
>
> The WorkspaceSynchronizer class can provider the IResource representing an
> EMF Resource. As you have probably seen already (indicated by your other
> post), the example editor uses this in determining when it needs to refresh
> from disk.
I should have been running the editor before looking at its code!
I very much like your solution that now there is a visual 1:1 representation
of modified files and editor instances.
Your Transaction component is really great work! Thanks for this ;-)
Cheers
/Eike
|
|
|
Re: Transaction Questions [message #14527 is a reply to message #14496] |
Thu, 19 January 2006 22:56 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Thanks for the positive feedback, Eike! That certainly helps to validate
the approach we're taking with this API.
Please don't hesitate to raise any issues that strike you (as I see you are
already doing). I look forward to them.
cW
Eike Stepper wrote:
>
>
> Christian W. Damus schrieb:
>> Hi, Eike,
>>
>> See responses in-line, below.
>>
>> Cheers,
>>
>> Christian
>>
>>
>> Eike Stepper wrote:
>>
>>
>>>Hi Christian,
>>>
>>>I'm just evaluating the new Transaction API for use in my product.
>>>Here are some questions:
>>>
>>>1) Is it necessary that own ResourceSets implement IEditingDomainProvider
>>>to be used with TXEditingDomain?
>>
>>
>> No. The TXEditingDomain.Factory links the resource set to its editing
>> domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
>> method does not require the IEditingDomainProvider interface. However,
>> if you do implement that interface for some other reason, then you will
>> need to ensure that it is consistent with what the factory thinks the
>> association is.
>
> I see. That is a nicer solution than EMF's own one ;-)
>
>
>>>3) Where is the relation between the physical files in the workspace and
>>>their in memory representation, e.g. Resources in the ResourceSet? What
>>>shall an editor do when the user hits "Save"?
>>
>>
>> The WorkspaceSynchronizer class can provider the IResource representing
>> an
>> EMF Resource. As you have probably seen already (indicated by your other
>> post), the example editor uses this in determining when it needs to
>> refresh from disk.
>
> I should have been running the editor before looking at its code!
> I very much like your solution that now there is a visual 1:1
> representation of modified files and editor instances.
>
> Your Transaction component is really great work! Thanks for this ;-)
>
> Cheers
> /Eike
|
|
|
Re: Transaction Questions [message #14555 is a reply to message #14466] |
Thu, 19 January 2006 23:00 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Yes, Eike,
I followed that newsgroup thread with some interest, but I hadn't had a look
at what you and Steven had contributed. I should do so.
cW
Eike Stepper wrote:
>
>
> Christian W. Damus schrieb:
>> Hi, Eike,
>>
>> Marking the changes with some kind of comment is a good idea. Raise a
>> bugzilla and I'll see to it!
>
> I filed https://bugs.eclipse.org/bugs/show_bug.cgi?id=124558
>
> In the context of the generated editor the following bugzilla might also
> be interesting: https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470
>
>
>> Regarding the code that you had to comment out: you need the M4 or later
>> version of Eclipse 3.2. This new findEditors() method is more correct
>> than the older simple editor-input-based findEditor() because it
>> considers the editor type as well, so that we do not accidentally close
>> (e.g.) a text editor.
>
> I see. I've had some problems with M4 and switched back to M3.
> I'll try newer I-builds...
>
> Thanks
> /Eike
|
|
|
Re: Transaction Questions [message #14588 is a reply to message #14496] |
Fri, 20 January 2006 12:38 |
Eclipse User |
|
|
|
Originally posted by: merks.ca.ibm.com
This is a multi-part message in MIME format.
--------------020900020601010109090306
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Eike,
AdapterFactoryEditingDomain has these methods so it's not generally
necessary for a resource set to implement IEditingDomainProvider
directly; it can provide the support using an adapters:
static public EditingDomain getEditingDomainFor(Object object)
{
if (object instanceof IEditingDomainProvider)
{
EditingDomain editingDomain =
((IEditingDomainProvider)object).getEditingDomain();
return editingDomain;
}
else if (object instanceof EObject)
{
EditingDomain editingDomain =
AdapterFactoryEditingDomain.getEditingDomainFor((EObject)obj ect);
return editingDomain;
}
else if (object instanceof FeatureMap.Entry)
{
return getEditingDomainFor(((FeatureMap.Entry)object).getValue());
}
else if (object instanceof IWrapperItemProvider)
{
return
getEditingDomainFor(((IWrapperItemProvider)object).getValue( ));
}
else
{
return null;
}
}
static public EditingDomain getEditingDomainFor(EObject object)
{
Resource resource = object.eResource();
if (resource != null)
{
IEditingDomainProvider editingDomainProvider =
(IEditingDomainProvider)EcoreUtil.getExistingAdapter(resourc e,
IEditingDomainProvider.class);
if (editingDomainProvider != null)
{
return editingDomainProvider.getEditingDomain();
}
else
{
ResourceSet resourceSet = resource.getResourceSet();
if (resourceSet instanceof IEditingDomainProvider)
{
EditingDomain editingDomain =
((IEditingDomainProvider)resourceSet).getEditingDomain();
return editingDomain;
}
else if (resourceSet != null)
{
editingDomainProvider =
(IEditingDomainProvider)EcoreUtil.getExistingAdapter(resourc eSet,
IEditingDomainProvider.class);
if (editingDomainProvider != null)
{
return editingDomainProvider.getEditingDomain();
}
}
}
}
return null;
}
Eike Stepper wrote:
>
>
> Christian W. Damus schrieb:
>
>> Hi, Eike,
>>
>> See responses in-line, below.
>>
>> Cheers,
>>
>> Christian
>>
>>
>> Eike Stepper wrote:
>>
>>
>>> Hi Christian,
>>>
>>> I'm just evaluating the new Transaction API for use in my product.
>>> Here are some questions:
>>>
>>> 1) Is it necessary that own ResourceSets implement
>>> IEditingDomainProvider
>>> to be used with TXEditingDomain?
>>
>>
>>
>> No. The TXEditingDomain.Factory links the resource set to its editing
>> domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
>> method does not require the IEditingDomainProvider interface.
>> However, if
>> you do implement that interface for some other reason, then you will
>> need
>> to ensure that it is consistent with what the factory thinks the
>> association is.
>
>
> I see. That is a nicer solution than EMF's own one ;-)
>
>
>>> 3) Where is the relation between the physical files in the workspace
>>> and
>>> their in memory representation, e.g. Resources in the ResourceSet? What
>>> shall an editor do when the user hits "Save"?
>>
>>
>>
>> The WorkspaceSynchronizer class can provider the IResource
>> representing an
>> EMF Resource. As you have probably seen already (indicated by your
>> other
>> post), the example editor uses this in determining when it needs to
>> refresh
>> from disk.
>
>
> I should have been running the editor before looking at its code!
> I very much like your solution that now there is a visual 1:1
> representation
> of modified files and editor instances.
>
> Your Transaction component is really great work! Thanks for this ;-)
>
> Cheers
> /Eike
--------------020900020601010109090306
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Eike,<br>
<br>
AdapterFactoryEditingDomain has these methods so it's not generally
necessary for a resource set to implement IEditingDomainProvider
directly; it can provide the support using an adapters:<br>
<blockquote><small> static public EditingDomain
getEditingDomainFor(Object object)</small><br>
<small> {</small><br>
<small> if (object instanceof IEditingDomainProvider)</small><br>
<small> {</small><br>
<small> EditingDomain editingDomain =
((IEditingDomainProvider)object).getEditingDomain();</small ><br>
<small> return editingDomain;</small><br>
<small> }</small><br>
<small> else if (object instanceof EObject)</small><br>
<small> {</small><br>
<small> EditingDomain editingDomain =
AdapterFactoryEditingDomain.getEditingDomainFor((EObject)obj ect); </small><br>
<small> return editingDomain;</small><br>
<small> }</small><br>
<small> else if (object instanceof FeatureMap.Entry)</small><br>
<small> {</small><br>
<small> return
getEditingDomainFor(((FeatureMap.Entry)object).getValue());</small ><br>
<small> }</small><br>
<small> else if (object instanceof IWrapperItemProvider)</small><br>
<small> {</small><br>
<small> return
getEditingDomainFor(((IWrapperItemProvider)object).getValue( )); </small><br>
<small> }</small><br>
<small> else</small><br>
<small> {</small><br>
<small> return null;</small><br>
<small> }</small><br>
<small> }<br>
<br>
static public EditingDomain getEditingDomainFor(EObject object)<br>
{<br>
Resource resource = object.eResource();<br>
if (resource != null)<br>
{<br>
IEditingDomainProvider editingDomainProvider =<br>
(IEditingDomainProvider)EcoreUtil.getExistingAdapter(resourc e,
IEditingDomainProvider.class);<br>
if (editingDomainProvider != null)<br>
{<br>
return editingDomainProvider.getEditingDomain();<br>
}<br>
else<br>
{<br>
ResourceSet resourceSet = resource.getResourceSet();<br>
if (resourceSet instanceof IEditingDomainProvider)<br>
{<br>
EditingDomain editingDomain =
((IEditingDomainProvider)resourceSet).getEditingDomain();<br >
return editingDomain;<br>
}<br>
else if (resourceSet != null)<br>
{<br>
editingDomainProvider =
(IEditingDomainProvider)EcoreUtil.getExistingAdapter(resourc eSet,
IEditingDomainProvider.class);<br>
if (editingDomainProvider != null)<br>
{<br>
return editingDomainProvider.getEditingDomain();<br>
}<br>
}<br>
}<br>
}<br>
<br>
return null;<br>
}<br>
</small></blockquote>
<br>
<br>
<br>
Eike Stepper wrote:
<blockquote cite="middqp53t$70j$1@utils.eclipse.org" type="cite"><br>
<br>
Christian W. Damus schrieb:
<br>
<blockquote type="cite">Hi, Eike,
<br>
<br>
See responses in-line, below.
<br>
<br>
Cheers,
<br>
<br>
Christian
<br>
<br>
<br>
Eike Stepper wrote:
<br>
<br>
<br>
<blockquote type="cite">Hi Christian,
<br>
<br>
I'm just evaluating the new Transaction API for use in my product.
<br>
Here are some questions:
<br>
<br>
1) Is it necessary that own ResourceSets implement
IEditingDomainProvider
<br>
to be used with TXEditingDomain?
<br>
</blockquote>
<br>
<br>
No. The TXEditingDomain.Factory links the resource set to its editing
<br>
domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
<br>
method does not require the IEditingDomainProvider interface. However,
if
<br>
you do implement that interface for some other reason, then you will
need
<br>
to ensure that it is consistent with what the factory thinks the
<br>
association is.
<br>
</blockquote>
<br>
I see. That is a nicer solution than EMF's own one ;-)
<br>
<br>
<br>
<blockquote type="cite">
<blockquote type="cite">3) Where is the relation between the
physical files in the workspace and
<br>
their in memory representation, e.g. Resources in the ResourceSet? What
<br>
shall an editor do when the user hits "Save"?
<br>
</blockquote>
<br>
<br>
The WorkspaceSynchronizer class can provider the IResource representing
an
<br>
EMF Resource. As you have probably seen already (indicated by your
other
<br>
post), the example editor uses this in determining when it needs to
refresh
<br>
from disk.
<br>
</blockquote>
<br>
I should have been running the editor before looking at its code!
<br>
I very much like your solution that now there is a visual 1:1
representation
<br>
of modified files and editor instances.
<br>
<br>
Your Transaction component is really great work! Thanks for this ;-)
<br>
<br>
Cheers
<br>
/Eike
<br>
</blockquote>
<br>
</body>
</html>
--------------020900020601010109090306--
|
|
|
Re: Transaction Questions [message #563162 is a reply to message #12360] |
Thu, 19 January 2006 12:51 |
|
I'm just about to analyze your Transaction-related changes to the EXTLibraryEditor.
It would be easier, if you annotated all your changes with @generated NOT (or @ADDED).
Btw. I had to comment out the following in ResourceLoadedListener
IEditorReference[] editors = page.findEditors(
new FileEditorInput(file),
" org.eclipse.emf.workbench.examples.extlibrary.presentation.E XTLibraryEditorID ", //$NON-NLS-1$
IWorkbenchPage.MATCH_ID | IWorkbenchPage.MATCH_INPUT);
page.closeEditors(editors, false);
MATCH_ID and MATCH_INPUT can't be resolved.
Cheers
/Eike
Eike Stepper schrieb:
> Hi Christian,
>
> I'm just evaluating the new Transaction API for use in my product.
> Here are some questions:
>
> 1) Is it necessary that own ResourceSets implement
> IEditingDomainProvider to be used with TXEditingDomain?
>
> 2) Is a concurrent thread allowed to read (only!) the ResourceSet of the
> TXEditingDomain directly, for example to validate in background?
>
> 3) Where is the relation between the physical files in the workspace and
> their in memory representation, e.g. Resources in the ResourceSet? What
> shall an editor do when the user hits "Save"?
>
> Cheers
> /Eike
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
|
Re: Transaction Questions [message #563187 is a reply to message #12360] |
Thu, 19 January 2006 13:38 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Hi, Eike,
See responses in-line, below.
Cheers,
Christian
Eike Stepper wrote:
> Hi Christian,
>
> I'm just evaluating the new Transaction API for use in my product.
> Here are some questions:
>
> 1) Is it necessary that own ResourceSets implement IEditingDomainProvider
> to be used with TXEditingDomain?
No. The TXEditingDomain.Factory links the resource set to its editing
domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
method does not require the IEditingDomainProvider interface. However, if
you do implement that interface for some other reason, then you will need
to ensure that it is consistent with what the factory thinks the
association is.
>
> 2) Is a concurrent thread allowed to read (only!) the ResourceSet of the
> TXEditingDomain directly, for example to validate in background?
I don't understand your question. A thread may actually read multiple
resource sets in different editing domains, but then you would need to be
wary of deadlocks (perhaps by implementing some kind of domain ordering).
Note that the Transaction API doesn't actually implement concurrency as
such; multiple "concurrent" readers of a resource set must cooperatively
yield read access to others. And write access is exclusive of all readers,
yielding or otherwise.
>
> 3) Where is the relation between the physical files in the workspace and
> their in memory representation, e.g. Resources in the ResourceSet? What
> shall an editor do when the user hits "Save"?
The WorkspaceSynchronizer class can provider the IResource representing an
EMF Resource. As you have probably seen already (indicated by your other
post), the example editor uses this in determining when it needs to refresh
from disk.
>
> Cheers
> /Eike
|
|
|
Re: Transaction Questions [message #563212 is a reply to message #12371] |
Thu, 19 January 2006 13:41 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Hi, Eike,
Marking the changes with some kind of comment is a good idea. Raise a
bugzilla and I'll see to it!
Regarding the code that you had to comment out: you need the M4 or later
version of Eclipse 3.2. This new findEditors() method is more correct than
the older simple editor-input-based findEditor() because it considers the
editor type as well, so that we do not accidentally close (e.g.) a text
editor.
Cheers,
Christian
Eike Stepper wrote:
> I'm just about to analyze your Transaction-related changes to the
> EXTLibraryEditor. It would be easier, if you annotated all your changes
> with @generated NOT (or @ADDED).
>
> Btw. I had to comment out the following in ResourceLoadedListener
>
> IEditorReference[] editors = page.findEditors(
> new FileEditorInput(file),
>
" org.eclipse.emf.workbench.examples.extlibrary.presentation.E XTLibraryEditorID ",
> //$NON-NLS-1$ IWorkbenchPage.MATCH_ID | IWorkbenchPage.MATCH_INPUT);
> page.closeEditors(editors, false);
>
> MATCH_ID and MATCH_INPUT can't be resolved.
>
> Cheers
> /Eike
>
>
>
> Eike Stepper schrieb:
>> Hi Christian,
>>
>> I'm just evaluating the new Transaction API for use in my product.
>> Here are some questions:
>>
>> 1) Is it necessary that own ResourceSets implement
>> IEditingDomainProvider to be used with TXEditingDomain?
>>
>> 2) Is a concurrent thread allowed to read (only!) the ResourceSet of the
>> TXEditingDomain directly, for example to validate in background?
>>
>> 3) Where is the relation between the physical files in the workspace and
>> their in memory representation, e.g. Resources in the ResourceSet? What
>> shall an editor do when the user hits "Save"?
>>
>> Cheers
>> /Eike
|
|
| |
Re: Transaction Questions [message #563449 is a reply to message #12379] |
Thu, 19 January 2006 22:50 |
|
Christian W. Damus schrieb:
> Hi, Eike,
>
> See responses in-line, below.
>
> Cheers,
>
> Christian
>
>
> Eike Stepper wrote:
>
>
>>Hi Christian,
>>
>>I'm just evaluating the new Transaction API for use in my product.
>>Here are some questions:
>>
>>1) Is it necessary that own ResourceSets implement IEditingDomainProvider
>>to be used with TXEditingDomain?
>
>
> No. The TXEditingDomain.Factory links the resource set to its editing
> domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
> method does not require the IEditingDomainProvider interface. However, if
> you do implement that interface for some other reason, then you will need
> to ensure that it is consistent with what the factory thinks the
> association is.
I see. That is a nicer solution than EMF's own one ;-)
>>3) Where is the relation between the physical files in the workspace and
>>their in memory representation, e.g. Resources in the ResourceSet? What
>>shall an editor do when the user hits "Save"?
>
>
> The WorkspaceSynchronizer class can provider the IResource representing an
> EMF Resource. As you have probably seen already (indicated by your other
> post), the example editor uses this in determining when it needs to refresh
> from disk.
I should have been running the editor before looking at its code!
I very much like your solution that now there is a visual 1:1 representation
of modified files and editor instances.
Your Transaction component is really great work! Thanks for this ;-)
Cheers
/Eike
Cheers
/Eike
----
http://www.esc-net.de
http://thegordian.blogspot.com
http://twitter.com/eikestepper
|
|
|
Re: Transaction Questions [message #563472 is a reply to message #14496] |
Thu, 19 January 2006 22:56 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Thanks for the positive feedback, Eike! That certainly helps to validate
the approach we're taking with this API.
Please don't hesitate to raise any issues that strike you (as I see you are
already doing). I look forward to them.
cW
Eike Stepper wrote:
>
>
> Christian W. Damus schrieb:
>> Hi, Eike,
>>
>> See responses in-line, below.
>>
>> Cheers,
>>
>> Christian
>>
>>
>> Eike Stepper wrote:
>>
>>
>>>Hi Christian,
>>>
>>>I'm just evaluating the new Transaction API for use in my product.
>>>Here are some questions:
>>>
>>>1) Is it necessary that own ResourceSets implement IEditingDomainProvider
>>>to be used with TXEditingDomain?
>>
>>
>> No. The TXEditingDomain.Factory links the resource set to its editing
>> domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
>> method does not require the IEditingDomainProvider interface. However,
>> if you do implement that interface for some other reason, then you will
>> need to ensure that it is consistent with what the factory thinks the
>> association is.
>
> I see. That is a nicer solution than EMF's own one ;-)
>
>
>>>3) Where is the relation between the physical files in the workspace and
>>>their in memory representation, e.g. Resources in the ResourceSet? What
>>>shall an editor do when the user hits "Save"?
>>
>>
>> The WorkspaceSynchronizer class can provider the IResource representing
>> an
>> EMF Resource. As you have probably seen already (indicated by your other
>> post), the example editor uses this in determining when it needs to
>> refresh from disk.
>
> I should have been running the editor before looking at its code!
> I very much like your solution that now there is a visual 1:1
> representation of modified files and editor instances.
>
> Your Transaction component is really great work! Thanks for this ;-)
>
> Cheers
> /Eike
|
|
|
Re: Transaction Questions [message #563502 is a reply to message #14466] |
Thu, 19 January 2006 23:00 |
Eclipse User |
|
|
|
Originally posted by: cdamus.ca.ibm.com
Yes, Eike,
I followed that newsgroup thread with some interest, but I hadn't had a look
at what you and Steven had contributed. I should do so.
cW
Eike Stepper wrote:
>
>
> Christian W. Damus schrieb:
>> Hi, Eike,
>>
>> Marking the changes with some kind of comment is a good idea. Raise a
>> bugzilla and I'll see to it!
>
> I filed https://bugs.eclipse.org/bugs/show_bug.cgi?id=124558
>
> In the context of the generated editor the following bugzilla might also
> be interesting: https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470
>
>
>> Regarding the code that you had to comment out: you need the M4 or later
>> version of Eclipse 3.2. This new findEditors() method is more correct
>> than the older simple editor-input-based findEditor() because it
>> considers the editor type as well, so that we do not accidentally close
>> (e.g.) a text editor.
>
> I see. I've had some problems with M4 and switched back to M3.
> I'll try newer I-builds...
>
> Thanks
> /Eike
|
|
|
Re: Transaction Questions [message #563528 is a reply to message #14496] |
Fri, 20 January 2006 12:38 |
Ed Merks Messages: 33252 Registered: July 2009 |
Senior Member |
|
|
This is a multi-part message in MIME format.
--------------020900020601010109090306
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Eike,
AdapterFactoryEditingDomain has these methods so it's not generally
necessary for a resource set to implement IEditingDomainProvider
directly; it can provide the support using an adapters:
static public EditingDomain getEditingDomainFor(Object object)
{
if (object instanceof IEditingDomainProvider)
{
EditingDomain editingDomain =
((IEditingDomainProvider)object).getEditingDomain();
return editingDomain;
}
else if (object instanceof EObject)
{
EditingDomain editingDomain =
AdapterFactoryEditingDomain.getEditingDomainFor((EObject)obj ect);
return editingDomain;
}
else if (object instanceof FeatureMap.Entry)
{
return getEditingDomainFor(((FeatureMap.Entry)object).getValue());
}
else if (object instanceof IWrapperItemProvider)
{
return
getEditingDomainFor(((IWrapperItemProvider)object).getValue( ));
}
else
{
return null;
}
}
static public EditingDomain getEditingDomainFor(EObject object)
{
Resource resource = object.eResource();
if (resource != null)
{
IEditingDomainProvider editingDomainProvider =
(IEditingDomainProvider)EcoreUtil.getExistingAdapter(resourc e,
IEditingDomainProvider.class);
if (editingDomainProvider != null)
{
return editingDomainProvider.getEditingDomain();
}
else
{
ResourceSet resourceSet = resource.getResourceSet();
if (resourceSet instanceof IEditingDomainProvider)
{
EditingDomain editingDomain =
((IEditingDomainProvider)resourceSet).getEditingDomain();
return editingDomain;
}
else if (resourceSet != null)
{
editingDomainProvider =
(IEditingDomainProvider)EcoreUtil.getExistingAdapter(resourc eSet,
IEditingDomainProvider.class);
if (editingDomainProvider != null)
{
return editingDomainProvider.getEditingDomain();
}
}
}
}
return null;
}
Eike Stepper wrote:
>
>
> Christian W. Damus schrieb:
>
>> Hi, Eike,
>>
>> See responses in-line, below.
>>
>> Cheers,
>>
>> Christian
>>
>>
>> Eike Stepper wrote:
>>
>>
>>> Hi Christian,
>>>
>>> I'm just evaluating the new Transaction API for use in my product.
>>> Here are some questions:
>>>
>>> 1) Is it necessary that own ResourceSets implement
>>> IEditingDomainProvider
>>> to be used with TXEditingDomain?
>>
>>
>>
>> No. The TXEditingDomain.Factory links the resource set to its editing
>> domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
>> method does not require the IEditingDomainProvider interface.
>> However, if
>> you do implement that interface for some other reason, then you will
>> need
>> to ensure that it is consistent with what the factory thinks the
>> association is.
>
>
> I see. That is a nicer solution than EMF's own one ;-)
>
>
>>> 3) Where is the relation between the physical files in the workspace
>>> and
>>> their in memory representation, e.g. Resources in the ResourceSet? What
>>> shall an editor do when the user hits "Save"?
>>
>>
>>
>> The WorkspaceSynchronizer class can provider the IResource
>> representing an
>> EMF Resource. As you have probably seen already (indicated by your
>> other
>> post), the example editor uses this in determining when it needs to
>> refresh
>> from disk.
>
>
> I should have been running the editor before looking at its code!
> I very much like your solution that now there is a visual 1:1
> representation
> of modified files and editor instances.
>
> Your Transaction component is really great work! Thanks for this ;-)
>
> Cheers
> /Eike
--------------020900020601010109090306
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Eike,<br>
<br>
AdapterFactoryEditingDomain has these methods so it's not generally
necessary for a resource set to implement IEditingDomainProvider
directly; it can provide the support using an adapters:<br>
<blockquote><small> static public EditingDomain
getEditingDomainFor(Object object)</small><br>
<small> {</small><br>
<small> if (object instanceof IEditingDomainProvider)</small><br>
<small> {</small><br>
<small> EditingDomain editingDomain =
((IEditingDomainProvider)object).getEditingDomain();</small ><br>
<small> return editingDomain;</small><br>
<small> }</small><br>
<small> else if (object instanceof EObject)</small><br>
<small> {</small><br>
<small> EditingDomain editingDomain =
AdapterFactoryEditingDomain.getEditingDomainFor((EObject)obj ect); </small><br>
<small> return editingDomain;</small><br>
<small> }</small><br>
<small> else if (object instanceof FeatureMap.Entry)</small><br>
<small> {</small><br>
<small> return
getEditingDomainFor(((FeatureMap.Entry)object).getValue());</small ><br>
<small> }</small><br>
<small> else if (object instanceof IWrapperItemProvider)</small><br>
<small> {</small><br>
<small> return
getEditingDomainFor(((IWrapperItemProvider)object).getValue( )); </small><br>
<small> }</small><br>
<small> else</small><br>
<small> {</small><br>
<small> return null;</small><br>
<small> }</small><br>
<small> }<br>
<br>
static public EditingDomain getEditingDomainFor(EObject object)<br>
{<br>
Resource resource = object.eResource();<br>
if (resource != null)<br>
{<br>
IEditingDomainProvider editingDomainProvider =<br>
(IEditingDomainProvider)EcoreUtil.getExistingAdapter(resourc e,
IEditingDomainProvider.class);<br>
if (editingDomainProvider != null)<br>
{<br>
return editingDomainProvider.getEditingDomain();<br>
}<br>
else<br>
{<br>
ResourceSet resourceSet = resource.getResourceSet();<br>
if (resourceSet instanceof IEditingDomainProvider)<br>
{<br>
EditingDomain editingDomain =
((IEditingDomainProvider)resourceSet).getEditingDomain();<br >
return editingDomain;<br>
}<br>
else if (resourceSet != null)<br>
{<br>
editingDomainProvider =
(IEditingDomainProvider)EcoreUtil.getExistingAdapter(resourc eSet,
IEditingDomainProvider.class);<br>
if (editingDomainProvider != null)<br>
{<br>
return editingDomainProvider.getEditingDomain();<br>
}<br>
}<br>
}<br>
}<br>
<br>
return null;<br>
}<br>
</small></blockquote>
<br>
<br>
<br>
Eike Stepper wrote:
<blockquote cite="middqp53t$70j$1@utils.eclipse.org" type="cite"><br>
<br>
Christian W. Damus schrieb:
<br>
<blockquote type="cite">Hi, Eike,
<br>
<br>
See responses in-line, below.
<br>
<br>
Cheers,
<br>
<br>
Christian
<br>
<br>
<br>
Eike Stepper wrote:
<br>
<br>
<br>
<blockquote type="cite">Hi Christian,
<br>
<br>
I'm just evaluating the new Transaction API for use in my product.
<br>
Here are some questions:
<br>
<br>
1) Is it necessary that own ResourceSets implement
IEditingDomainProvider
<br>
to be used with TXEditingDomain?
<br>
</blockquote>
<br>
<br>
No. The TXEditingDomain.Factory links the resource set to its editing
<br>
domain by attaching an Adapter to it; the getEditingDomain(ResourceSet)
<br>
method does not require the IEditingDomainProvider interface. However,
if
<br>
you do implement that interface for some other reason, then you will
need
<br>
to ensure that it is consistent with what the factory thinks the
<br>
association is.
<br>
</blockquote>
<br>
I see. That is a nicer solution than EMF's own one ;-)
<br>
<br>
<br>
<blockquote type="cite">
<blockquote type="cite">3) Where is the relation between the
physical files in the workspace and
<br>
their in memory representation, e.g. Resources in the ResourceSet? What
<br>
shall an editor do when the user hits "Save"?
<br>
</blockquote>
<br>
<br>
The WorkspaceSynchronizer class can provider the IResource representing
an
<br>
EMF Resource. As you have probably seen already (indicated by your
other
<br>
post), the example editor uses this in determining when it needs to
refresh
<br>
from disk.
<br>
</blockquote>
<br>
I should have been running the editor before looking at its code!
<br>
I very much like your solution that now there is a visual 1:1
representation
<br>
of modified files and editor instances.
<br>
<br>
Your Transaction component is really great work! Thanks for this ;-)
<br>
<br>
Cheers
<br>
/Eike
<br>
</blockquote>
<br>
</body>
</html>
--------------020900020601010109090306--
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
|
Goto Forum:
Current Time: Fri Nov 08 21:55:06 GMT 2024
Powered by FUDForum. Page generated in 0.04756 seconds
|