Home » Modeling » EMF » [Data Binding] Table viewer and EMF Data Binding.
[Data Binding] Table viewer and EMF Data Binding. [message #422842] |
Wed, 17 September 2008 07:03 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Hi,
I am trying to write Table Viewer which shows my model element and trying
to use emf databinding for editing the model.
I have 2different types of objects to display. For example
Class A {
name,
description
}
Class B {
text,
description
}
First column should display the name if the object is instance of A and text
if the object is B. In second column i need to
display a description of the object.
As a first step i want to populate the 1st and second column if the
tableviewer input is set with the same object type list. For example if i
have 10 object of type A it works fine. But i am not able add both type of
objects as
input to the viewer.if i do i am getting NPE.
following the the code which i add the viewer code...
Table Viewer tableViewer = new TableViewer(composite,
SWT.BORDER|SWT.H_SCROLL | SWT.V_SCROLL|SWT.FULL_SELECTION);
table = tableViewer.getTable();
table.setLinesVisible(true);
table.setHeaderVisible(true);
TableViewerColumn firstColumn = new
TableViewerColumn(tableViewer,SWT.LEAD);
firstColumn .getColumn().setText("First");
firstColumn .getColumn().setWidth(100);
firstColumn .getColumn().setMoveable(true);
TableViewerColumn secondColumn = new TableViewerColumn(tableViewer,
SWT.LEAD);
secondColumn.getColumn().setText("Second");
secondColumn.getColumn().setWidth(100);
secondColumn.getColumn().setMoveable(true);
DataBindingContext bindingContext = new DataBindingContext();
ObservableListContentProvider tableViewerContentProvider = new
ObservableListContentProvider();
tableViewer.setContentProvider(tableViewerContentProvider);
IObservableMap[] attributeMaps = EMFObservables.observeMaps(
tableViewerContentProvider.getKnownElements(),
new EStructuralFeature[]
{First_Column_CLASS_A_NAME_EStructuralFeature_ID}); //here i tried to add
estructural feature id of text of type class B if added the object type b in
tableViewer Input.
firstColumn.setLabelProvider(new
GenericObservableMapCellLabelProvider(attributeMaps,"{0}"));/** TOms generic
Label Provider*/
IObservableMap[] descriptionsMap = EMFObservables.observeMaps(
tableViewerContentProvider.getKnownElements(),
new EStructuralFeature[] {second_Column_EStructuralFeature_ID});
desColumn.setLabelProvider(new
GenericObservableMapCellLabelProvider(descriptionsMap, "{0}"));
tableViewer.setInput(list);/* list is the Collection of Class Type A object
for now */
Any help is appricated.
Regards,
Suresh Subramanian
|
|
| | |
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422852 is a reply to message #422849] |
Wed, 17 September 2008 09:28 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
Could you simple
Base {
label: String
}
A extend Base {
}
B extend Base {
}
Then observe the base attribute label? If you depend on name and text
somewhere else you could mark them as volatile and transient and
delegate calls to them to Base#get/setLabel().
I think I can remember having looked at this Observable-Map problem
already and try to find a solution by make the observing somehow
conditional.
Something like this:
EMFObservables#observeConditionalMap(
tableViewerContentProvider.getKnownElements(),
new Condition[] {
new ConditionStrategy(
MyPack.Literal.CLASS_A,
MyPack.Literal.CLASS_A_ATTR_A),
new ConditionStrategy(
MyPack.Literal.CLASS_B,
MyPack.Literal.CLASS_B_ATTR_B)
}
)
But it haven't had time to really think about it, maybe it is complete
nonesense anyways :-)
Tom
Suresh Subramanian schrieb:
> Tom,
>
> Thanks for your input. It is not working if i have 2 unrealted object
> types.It is only working for one single Type. So i guess it is not possible
> then.
>
> Regards,
> Suresh Subramanian
> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
> news:gaqdnp$fs9$1@build.eclipse.org...
>> Suresh Subramanian schrieb:
>>> Hi,
>>>
>>> I am trying to write Table Viewer which shows my model element and
>>> trying
>>> to use emf databinding for editing the model.
>>>
>>> I have 2different types of objects to display. For example
>>>
>>> Class A {
>>> name,
>>> description
>>> }
>>> Class B {
>>> text,
>>> description
>>> }
>>>
>>> First column should display the name if the object is instance of A and
>>> text
>>> if the object is B. In second column i need to
>>> display a description of the object.
>> 1. It would help to see the NPE and where it happens, it's possible that
>> my LabelProvider has a bug.
>>
>> 2. I haven't looked at the implementation of EMObservales.observeMap and
>> if it can deal with 2 completely unrelated object types at least the
>> Bean implementation can't so if it works is an undocumented feature.
>>
>> Tom
>>
>> --
>> B e s t S o l u t i o n . at
>> ------------------------------------------------------------ --------
>> Tom Schindl JFace-Committer
>> ------------------------------------------------------------ --------
>
>
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422856 is a reply to message #422852] |
Wed, 17 September 2008 13:18 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Thanks Tom. I will try it.
Regards,
Suresh Subramanian
"Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
news:gaqikq$a1d$1@build.eclipse.org...
> Could you simple
>
> Base {
> label: String
> }
>
> A extend Base {
>
> }
>
> B extend Base {
>
> }
>
> Then observe the base attribute label? If you depend on name and text
> somewhere else you could mark them as volatile and transient and
> delegate calls to them to Base#get/setLabel().
>
> I think I can remember having looked at this Observable-Map problem
> already and try to find a solution by make the observing somehow
> conditional.
>
> Something like this:
>
> EMFObservables#observeConditionalMap(
> tableViewerContentProvider.getKnownElements(),
> new Condition[] {
> new ConditionStrategy(
> MyPack.Literal.CLASS_A,
> MyPack.Literal.CLASS_A_ATTR_A),
> new ConditionStrategy(
> MyPack.Literal.CLASS_B,
> MyPack.Literal.CLASS_B_ATTR_B)
> }
> )
>
> But it haven't had time to really think about it, maybe it is complete
> nonesense anyways :-)
>
> Tom
>
> Suresh Subramanian schrieb:
>> Tom,
>>
>> Thanks for your input. It is not working if i have 2 unrealted object
>> types.It is only working for one single Type. So i guess it is not
>> possible
>> then.
>>
>> Regards,
>> Suresh Subramanian
>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>> news:gaqdnp$fs9$1@build.eclipse.org...
>>> Suresh Subramanian schrieb:
>>>> Hi,
>>>>
>>>> I am trying to write Table Viewer which shows my model element and
>>>> trying
>>>> to use emf databinding for editing the model.
>>>>
>>>> I have 2different types of objects to display. For example
>>>>
>>>> Class A {
>>>> name,
>>>> description
>>>> }
>>>> Class B {
>>>> text,
>>>> description
>>>> }
>>>>
>>>> First column should display the name if the object is instance of A and
>>>> text
>>>> if the object is B. In second column i need to
>>>> display a description of the object.
>>> 1. It would help to see the NPE and where it happens, it's possible that
>>> my LabelProvider has a bug.
>>>
>>> 2. I haven't looked at the implementation of EMObservales.observeMap and
>>> if it can deal with 2 completely unrelated object types at least the
>>> Bean implementation can't so if it works is an undocumented feature.
>>>
>>> Tom
>>>
>>> --
>>> B e s t S o l u t i o n . at
>>> ------------------------------------------------------------ --------
>>> Tom Schindl JFace-Committer
>>> ------------------------------------------------------------ --------
>>
>>
>
>
> --
> B e s t S o l u t i o n . at
> ------------------------------------------------------------ --------
> Tom Schindl JFace-Committer
> ------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422866 is a reply to message #422856] |
Wed, 17 September 2008 16:40 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
Hi,
by the way you are using an old implementation of my LabelProvider an
even better one is the one I use in the CDO/Databinding-Example-Project.
It allows you to access nested attributes of observed attributes :-)
The LabelProvider:
http://publicsvn.bestsolution.at/repos/java/examples/EMF-Dat abinding/at.bestsolution.soccer.ui.common/src/at/bestsolutio n/soccer/ui/common/viewers/ObservableColumnLabelProvider.jav a
How it is used:
http://publicsvn.bestsolution.at/repos/java/examples/EMF-Dat abinding/at.bestsolution.soccer.ui.associationadmin/src/at/b estsolution/soccer/ui/associationadmin/AssociationAdministra tionViewPart.java
Tom
Suresh Subramanian schrieb:
> Thanks Tom. I will try it.
>
> Regards,
> Suresh Subramanian
> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
> news:gaqikq$a1d$1@build.eclipse.org...
>> Could you simple
>>
>> Base {
>> label: String
>> }
>>
>> A extend Base {
>>
>> }
>>
>> B extend Base {
>>
>> }
>>
>> Then observe the base attribute label? If you depend on name and text
>> somewhere else you could mark them as volatile and transient and
>> delegate calls to them to Base#get/setLabel().
>>
>> I think I can remember having looked at this Observable-Map problem
>> already and try to find a solution by make the observing somehow
>> conditional.
>>
>> Something like this:
>>
>> EMFObservables#observeConditionalMap(
>> tableViewerContentProvider.getKnownElements(),
>> new Condition[] {
>> new ConditionStrategy(
>> MyPack.Literal.CLASS_A,
>> MyPack.Literal.CLASS_A_ATTR_A),
>> new ConditionStrategy(
>> MyPack.Literal.CLASS_B,
>> MyPack.Literal.CLASS_B_ATTR_B)
>> }
>> )
>>
>> But it haven't had time to really think about it, maybe it is complete
>> nonesense anyways :-)
>>
>> Tom
>>
>> Suresh Subramanian schrieb:
>>> Tom,
>>>
>>> Thanks for your input. It is not working if i have 2 unrealted object
>>> types.It is only working for one single Type. So i guess it is not
>>> possible
>>> then.
>>>
>>> Regards,
>>> Suresh Subramanian
>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>> Suresh Subramanian schrieb:
>>>>> Hi,
>>>>>
>>>>> I am trying to write Table Viewer which shows my model element and
>>>>> trying
>>>>> to use emf databinding for editing the model.
>>>>>
>>>>> I have 2different types of objects to display. For example
>>>>>
>>>>> Class A {
>>>>> name,
>>>>> description
>>>>> }
>>>>> Class B {
>>>>> text,
>>>>> description
>>>>> }
>>>>>
>>>>> First column should display the name if the object is instance of A and
>>>>> text
>>>>> if the object is B. In second column i need to
>>>>> display a description of the object.
>>>> 1. It would help to see the NPE and where it happens, it's possible that
>>>> my LabelProvider has a bug.
>>>>
>>>> 2. I haven't looked at the implementation of EMObservales.observeMap and
>>>> if it can deal with 2 completely unrelated object types at least the
>>>> Bean implementation can't so if it works is an undocumented feature.
>>>>
>>>> Tom
>>>>
>>>> --
>>>> B e s t S o l u t i o n . at
>>>> ------------------------------------------------------------ --------
>>>> Tom Schindl JFace-Committer
>>>> ------------------------------------------------------------ --------
>>>
>>
>> --
>> B e s t S o l u t i o n . at
>> ------------------------------------------------------------ --------
>> Tom Schindl JFace-Committer
>> ------------------------------------------------------------ --------
>
>
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422891 is a reply to message #422852] |
Thu, 18 September 2008 06:40 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Tom,
Is it possible for you help me writing
EMFObservables#observeConditionalMap(
new Condition[] {
> new ConditionStrategy(
> MyPack.Literal.CLASS_A,
> MyPack.Literal.CLASS_A_ATTR_A),
> new ConditionStrategy(
> MyPack.Literal.CLASS_B,
> MyPack.Literal.CLASS_B_ATTR_B)
I don't see that in 3.4
Regards,
Suresh Subramanian
"Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
news:gaqikq$a1d$1@build.eclipse.org...
> Could you simple
>
> Base {
> label: String
> }
>
> A extend Base {
>
> }
>
> B extend Base {
>
> }
>
> Then observe the base attribute label? If you depend on name and text
> somewhere else you could mark them as volatile and transient and
> delegate calls to them to Base#get/setLabel().
>
> I think I can remember having looked at this Observable-Map problem
> already and try to find a solution by make the observing somehow
> conditional.
>
> Something like this:
>
> EMFObservables#observeConditionalMap(
> tableViewerContentProvider.getKnownElements(),
> new Condition[] {
> new ConditionStrategy(
> MyPack.Literal.CLASS_A,
> MyPack.Literal.CLASS_A_ATTR_A),
> new ConditionStrategy(
> MyPack.Literal.CLASS_B,
> MyPack.Literal.CLASS_B_ATTR_B)
> }
> )
>
> But it haven't had time to really think about it, maybe it is complete
> nonesense anyways :-)
>
> Tom
>
> Suresh Subramanian schrieb:
>> Tom,
>>
>> Thanks for your input. It is not working if i have 2 unrealted object
>> types.It is only working for one single Type. So i guess it is not
>> possible
>> then.
>>
>> Regards,
>> Suresh Subramanian
>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>> news:gaqdnp$fs9$1@build.eclipse.org...
>>> Suresh Subramanian schrieb:
>>>> Hi,
>>>>
>>>> I am trying to write Table Viewer which shows my model element and
>>>> trying
>>>> to use emf databinding for editing the model.
>>>>
>>>> I have 2different types of objects to display. For example
>>>>
>>>> Class A {
>>>> name,
>>>> description
>>>> }
>>>> Class B {
>>>> text,
>>>> description
>>>> }
>>>>
>>>> First column should display the name if the object is instance of A and
>>>> text
>>>> if the object is B. In second column i need to
>>>> display a description of the object.
>>> 1. It would help to see the NPE and where it happens, it's possible that
>>> my LabelProvider has a bug.
>>>
>>> 2. I haven't looked at the implementation of EMObservales.observeMap and
>>> if it can deal with 2 completely unrelated object types at least the
>>> Bean implementation can't so if it works is an undocumented feature.
>>>
>>> Tom
>>>
>>> --
>>> B e s t S o l u t i o n . at
>>> ------------------------------------------------------------ --------
>>> Tom Schindl JFace-Committer
>>> ------------------------------------------------------------ --------
>>
>>
>
>
> --
> B e s t S o l u t i o n . at
> ------------------------------------------------------------ --------
> Tom Schindl JFace-Committer
> ------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422892 is a reply to message #422891] |
Thu, 18 September 2008 07:14 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
Hi,
I know its not there :-) Let me check and see how this could be done.
Tom
Suresh Subramanian schrieb:
> Tom,
>
> Is it possible for you help me writing
> EMFObservables#observeConditionalMap(
> new Condition[] {
>> new ConditionStrategy(
>> MyPack.Literal.CLASS_A,
>> MyPack.Literal.CLASS_A_ATTR_A),
>> new ConditionStrategy(
>> MyPack.Literal.CLASS_B,
>> MyPack.Literal.CLASS_B_ATTR_B)
> I don't see that in 3.4
>
> Regards,
> Suresh Subramanian
> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
> news:gaqikq$a1d$1@build.eclipse.org...
>> Could you simple
>>
>> Base {
>> label: String
>> }
>>
>> A extend Base {
>>
>> }
>>
>> B extend Base {
>>
>> }
>>
>> Then observe the base attribute label? If you depend on name and text
>> somewhere else you could mark them as volatile and transient and
>> delegate calls to them to Base#get/setLabel().
>>
>> I think I can remember having looked at this Observable-Map problem
>> already and try to find a solution by make the observing somehow
>> conditional.
>>
>> Something like this:
>>
>> EMFObservables#observeConditionalMap(
>> tableViewerContentProvider.getKnownElements(),
>> new Condition[] {
>> new ConditionStrategy(
>> MyPack.Literal.CLASS_A,
>> MyPack.Literal.CLASS_A_ATTR_A),
>> new ConditionStrategy(
>> MyPack.Literal.CLASS_B,
>> MyPack.Literal.CLASS_B_ATTR_B)
>> }
>> )
>>
>> But it haven't had time to really think about it, maybe it is complete
>> nonesense anyways :-)
>>
>> Tom
>>
>> Suresh Subramanian schrieb:
>>> Tom,
>>>
>>> Thanks for your input. It is not working if i have 2 unrealted object
>>> types.It is only working for one single Type. So i guess it is not
>>> possible
>>> then.
>>>
>>> Regards,
>>> Suresh Subramanian
>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>> Suresh Subramanian schrieb:
>>>>> Hi,
>>>>>
>>>>> I am trying to write Table Viewer which shows my model element and
>>>>> trying
>>>>> to use emf databinding for editing the model.
>>>>>
>>>>> I have 2different types of objects to display. For example
>>>>>
>>>>> Class A {
>>>>> name,
>>>>> description
>>>>> }
>>>>> Class B {
>>>>> text,
>>>>> description
>>>>> }
>>>>>
>>>>> First column should display the name if the object is instance of A and
>>>>> text
>>>>> if the object is B. In second column i need to
>>>>> display a description of the object.
>>>> 1. It would help to see the NPE and where it happens, it's possible that
>>>> my LabelProvider has a bug.
>>>>
>>>> 2. I haven't looked at the implementation of EMObservales.observeMap and
>>>> if it can deal with 2 completely unrelated object types at least the
>>>> Bean implementation can't so if it works is an undocumented feature.
>>>>
>>>> Tom
>>>>
>>>> --
>>>> B e s t S o l u t i o n . at
>>>> ------------------------------------------------------------ --------
>>>> Tom Schindl JFace-Committer
>>>> ------------------------------------------------------------ --------
>>>
>>
>> --
>> B e s t S o l u t i o n . at
>> ------------------------------------------------------------ --------
>> Tom Schindl JFace-Committer
>> ------------------------------------------------------------ --------
>
>
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422893 is a reply to message #422892] |
Thu, 18 September 2008 07:57 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
Hi,
With standard ObservableMapLabelProvider this already works in
EMF-Databinding because of the way EMF works :-)
I guess the problem is may LabelProvider then.
Tom
Tom Schindl schrieb:
> Hi,
>
> I know its not there :-) Let me check and see how this could be done.
>
> Tom
>
> Suresh Subramanian schrieb:
>> Tom,
>>
>> Is it possible for you help me writing
>> EMFObservables#observeConditionalMap(
>> new Condition[] {
>>> new ConditionStrategy(
>>> MyPack.Literal.CLASS_A,
>>> MyPack.Literal.CLASS_A_ATTR_A),
>>> new ConditionStrategy(
>>> MyPack.Literal.CLASS_B,
>>> MyPack.Literal.CLASS_B_ATTR_B)
>> I don't see that in 3.4
>>
>> Regards,
>> Suresh Subramanian
>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>> news:gaqikq$a1d$1@build.eclipse.org...
>>> Could you simple
>>>
>>> Base {
>>> label: String
>>> }
>>>
>>> A extend Base {
>>>
>>> }
>>>
>>> B extend Base {
>>>
>>> }
>>>
>>> Then observe the base attribute label? If you depend on name and text
>>> somewhere else you could mark them as volatile and transient and
>>> delegate calls to them to Base#get/setLabel().
>>>
>>> I think I can remember having looked at this Observable-Map problem
>>> already and try to find a solution by make the observing somehow
>>> conditional.
>>>
>>> Something like this:
>>>
>>> EMFObservables#observeConditionalMap(
>>> tableViewerContentProvider.getKnownElements(),
>>> new Condition[] {
>>> new ConditionStrategy(
>>> MyPack.Literal.CLASS_A,
>>> MyPack.Literal.CLASS_A_ATTR_A),
>>> new ConditionStrategy(
>>> MyPack.Literal.CLASS_B,
>>> MyPack.Literal.CLASS_B_ATTR_B)
>>> }
>>> )
>>>
>>> But it haven't had time to really think about it, maybe it is complete
>>> nonesense anyways :-)
>>>
>>> Tom
>>>
>>> Suresh Subramanian schrieb:
>>>> Tom,
>>>>
>>>> Thanks for your input. It is not working if i have 2 unrealted object
>>>> types.It is only working for one single Type. So i guess it is not
>>>> possible
>>>> then.
>>>>
>>>> Regards,
>>>> Suresh Subramanian
>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>>> Suresh Subramanian schrieb:
>>>>>> Hi,
>>>>>>
>>>>>> I am trying to write Table Viewer which shows my model element and
>>>>>> trying
>>>>>> to use emf databinding for editing the model.
>>>>>>
>>>>>> I have 2different types of objects to display. For example
>>>>>>
>>>>>> Class A {
>>>>>> name,
>>>>>> description
>>>>>> }
>>>>>> Class B {
>>>>>> text,
>>>>>> description
>>>>>> }
>>>>>>
>>>>>> First column should display the name if the object is instance of A and
>>>>>> text
>>>>>> if the object is B. In second column i need to
>>>>>> display a description of the object.
>>>>> 1. It would help to see the NPE and where it happens, it's possible that
>>>>> my LabelProvider has a bug.
>>>>>
>>>>> 2. I haven't looked at the implementation of EMObservales.observeMap and
>>>>> if it can deal with 2 completely unrelated object types at least the
>>>>> Bean implementation can't so if it works is an undocumented feature.
>>>>>
>>>>> Tom
>>>>>
>>>>> --
>>>>> B e s t S o l u t i o n . at
>>>>> ------------------------------------------------------------ --------
>>>>> Tom Schindl JFace-Committer
>>>>> ------------------------------------------------------------ --------
>>> --
>>> B e s t S o l u t i o n . at
>>> ------------------------------------------------------------ --------
>>> Tom Schindl JFace-Committer
>>> ------------------------------------------------------------ --------
>>
>
>
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422894 is a reply to message #422893] |
Thu, 18 September 2008 08:01 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
And the label provider I referenced yesterday also works.
Tom
Tom Schindl schrieb:
> Hi,
>
> With standard ObservableMapLabelProvider this already works in
> EMF-Databinding because of the way EMF works :-)
>
> I guess the problem is may LabelProvider then.
>
> Tom
>
> Tom Schindl schrieb:
>> Hi,
>>
>> I know its not there :-) Let me check and see how this could be done.
>>
>> Tom
>>
>> Suresh Subramanian schrieb:
>>> Tom,
>>>
>>> Is it possible for you help me writing
>>> EMFObservables#observeConditionalMap(
>>> new Condition[] {
>>>> new ConditionStrategy(
>>>> MyPack.Literal.CLASS_A,
>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>> new ConditionStrategy(
>>>> MyPack.Literal.CLASS_B,
>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>> I don't see that in 3.4
>>>
>>> Regards,
>>> Suresh Subramanian
>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>> news:gaqikq$a1d$1@build.eclipse.org...
>>>> Could you simple
>>>>
>>>> Base {
>>>> label: String
>>>> }
>>>>
>>>> A extend Base {
>>>>
>>>> }
>>>>
>>>> B extend Base {
>>>>
>>>> }
>>>>
>>>> Then observe the base attribute label? If you depend on name and text
>>>> somewhere else you could mark them as volatile and transient and
>>>> delegate calls to them to Base#get/setLabel().
>>>>
>>>> I think I can remember having looked at this Observable-Map problem
>>>> already and try to find a solution by make the observing somehow
>>>> conditional.
>>>>
>>>> Something like this:
>>>>
>>>> EMFObservables#observeConditionalMap(
>>>> tableViewerContentProvider.getKnownElements(),
>>>> new Condition[] {
>>>> new ConditionStrategy(
>>>> MyPack.Literal.CLASS_A,
>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>> new ConditionStrategy(
>>>> MyPack.Literal.CLASS_B,
>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>> }
>>>> )
>>>>
>>>> But it haven't had time to really think about it, maybe it is complete
>>>> nonesense anyways :-)
>>>>
>>>> Tom
>>>>
>>>> Suresh Subramanian schrieb:
>>>>> Tom,
>>>>>
>>>>> Thanks for your input. It is not working if i have 2 unrealted object
>>>>> types.It is only working for one single Type. So i guess it is not
>>>>> possible
>>>>> then.
>>>>>
>>>>> Regards,
>>>>> Suresh Subramanian
>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>>>> Suresh Subramanian schrieb:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I am trying to write Table Viewer which shows my model element and
>>>>>>> trying
>>>>>>> to use emf databinding for editing the model.
>>>>>>>
>>>>>>> I have 2different types of objects to display. For example
>>>>>>>
>>>>>>> Class A {
>>>>>>> name,
>>>>>>> description
>>>>>>> }
>>>>>>> Class B {
>>>>>>> text,
>>>>>>> description
>>>>>>> }
>>>>>>>
>>>>>>> First column should display the name if the object is instance of A and
>>>>>>> text
>>>>>>> if the object is B. In second column i need to
>>>>>>> display a description of the object.
>>>>>> 1. It would help to see the NPE and where it happens, it's possible that
>>>>>> my LabelProvider has a bug.
>>>>>>
>>>>>> 2. I haven't looked at the implementation of EMObservales.observeMap and
>>>>>> if it can deal with 2 completely unrelated object types at least the
>>>>>> Bean implementation can't so if it works is an undocumented feature.
>>>>>>
>>>>>> Tom
>>>>>>
>>>>>> --
>>>>>> B e s t S o l u t i o n . at
>>>>>> ------------------------------------------------------------ --------
>>>>>> Tom Schindl JFace-Committer
>>>>>> ------------------------------------------------------------ --------
>>>> --
>>>> B e s t S o l u t i o n . at
>>>> ------------------------------------------------------------ --------
>>>> Tom Schindl JFace-Committer
>>>> ------------------------------------------------------------ --------
>>
>
>
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422926 is a reply to message #422894] |
Fri, 19 September 2008 00:17 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Tom,
I am trying to find org.apache.commons.lang.text plugin. do you know where
can i find it.
Regards,
Suresh Subramanian
"Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
news:gat1so$9f8$1@build.eclipse.org...
> And the label provider I referenced yesterday also works.
>
> Tom
>
> Tom Schindl schrieb:
>> Hi,
>>
>> With standard ObservableMapLabelProvider this already works in
>> EMF-Databinding because of the way EMF works :-)
>>
>> I guess the problem is may LabelProvider then.
>>
>> Tom
>>
>> Tom Schindl schrieb:
>>> Hi,
>>>
>>> I know its not there :-) Let me check and see how this could be done.
>>>
>>> Tom
>>>
>>> Suresh Subramanian schrieb:
>>>> Tom,
>>>>
>>>> Is it possible for you help me writing
>>>> EMFObservables#observeConditionalMap(
>>>> new Condition[] {
>>>>> new ConditionStrategy(
>>>>> MyPack.Literal.CLASS_A,
>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>> new ConditionStrategy(
>>>>> MyPack.Literal.CLASS_B,
>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>> I don't see that in 3.4
>>>>
>>>> Regards,
>>>> Suresh Subramanian
>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>> news:gaqikq$a1d$1@build.eclipse.org...
>>>>> Could you simple
>>>>>
>>>>> Base {
>>>>> label: String
>>>>> }
>>>>>
>>>>> A extend Base {
>>>>>
>>>>> }
>>>>>
>>>>> B extend Base {
>>>>>
>>>>> }
>>>>>
>>>>> Then observe the base attribute label? If you depend on name and text
>>>>> somewhere else you could mark them as volatile and transient and
>>>>> delegate calls to them to Base#get/setLabel().
>>>>>
>>>>> I think I can remember having looked at this Observable-Map problem
>>>>> already and try to find a solution by make the observing somehow
>>>>> conditional.
>>>>>
>>>>> Something like this:
>>>>>
>>>>> EMFObservables#observeConditionalMap(
>>>>> tableViewerContentProvider.getKnownElements(),
>>>>> new Condition[] {
>>>>> new ConditionStrategy(
>>>>> MyPack.Literal.CLASS_A,
>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>> new ConditionStrategy(
>>>>> MyPack.Literal.CLASS_B,
>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>> }
>>>>> )
>>>>>
>>>>> But it haven't had time to really think about it, maybe it is complete
>>>>> nonesense anyways :-)
>>>>>
>>>>> Tom
>>>>>
>>>>> Suresh Subramanian schrieb:
>>>>>> Tom,
>>>>>>
>>>>>> Thanks for your input. It is not working if i have 2 unrealted object
>>>>>> types.It is only working for one single Type. So i guess it is not
>>>>>> possible
>>>>>> then.
>>>>>>
>>>>>> Regards,
>>>>>> Suresh Subramanian
>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>>>>> Suresh Subramanian schrieb:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I am trying to write Table Viewer which shows my model element and
>>>>>>>> trying
>>>>>>>> to use emf databinding for editing the model.
>>>>>>>>
>>>>>>>> I have 2different types of objects to display. For example
>>>>>>>>
>>>>>>>> Class A {
>>>>>>>> name,
>>>>>>>> description
>>>>>>>> }
>>>>>>>> Class B {
>>>>>>>> text,
>>>>>>>> description
>>>>>>>> }
>>>>>>>>
>>>>>>>> First column should display the name if the object is instance of A
>>>>>>>> and
>>>>>>>> text
>>>>>>>> if the object is B. In second column i need to
>>>>>>>> display a description of the object.
>>>>>>> 1. It would help to see the NPE and where it happens, it's possible
>>>>>>> that
>>>>>>> my LabelProvider has a bug.
>>>>>>>
>>>>>>> 2. I haven't looked at the implementation of EMObservales.observeMap
>>>>>>> and
>>>>>>> if it can deal with 2 completely unrelated object types at least
>>>>>>> the
>>>>>>> Bean implementation can't so if it works is an undocumented
>>>>>>> feature.
>>>>>>>
>>>>>>> Tom
>>>>>>>
>>>>>>> --
>>>>>>> B e s t S o l u t i o n . at
>>>>>>> ------------------------------------------------------------ --------
>>>>>>> Tom Schindl JFace-Committer
>>>>>>> ------------------------------------------------------------ --------
>>>>> --
>>>>> B e s t S o l u t i o n . at
>>>>> ------------------------------------------------------------ --------
>>>>> Tom Schindl JFace-Committer
>>>>> ------------------------------------------------------------ --------
>>>
>>
>>
>
>
> --
> B e s t S o l u t i o n . at
> ------------------------------------------------------------ --------
> Tom Schindl JFace-Committer
> ------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422927 is a reply to message #422926] |
Fri, 19 September 2008 00:19 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
http://download.eclipse.org/tools/orbit/downloads/drops/R200 80807152315/
Tom
Suresh Subramanian schrieb:
> Tom,
> I am trying to find org.apache.commons.lang.text plugin. do you know where
> can i find it.
>
> Regards,
> Suresh Subramanian
> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
> news:gat1so$9f8$1@build.eclipse.org...
>> And the label provider I referenced yesterday also works.
>>
>> Tom
>>
>> Tom Schindl schrieb:
>>> Hi,
>>>
>>> With standard ObservableMapLabelProvider this already works in
>>> EMF-Databinding because of the way EMF works :-)
>>>
>>> I guess the problem is may LabelProvider then.
>>>
>>> Tom
>>>
>>> Tom Schindl schrieb:
>>>> Hi,
>>>>
>>>> I know its not there :-) Let me check and see how this could be done.
>>>>
>>>> Tom
>>>>
>>>> Suresh Subramanian schrieb:
>>>>> Tom,
>>>>>
>>>>> Is it possible for you help me writing
>>>>> EMFObservables#observeConditionalMap(
>>>>> new Condition[] {
>>>>>> new ConditionStrategy(
>>>>>> MyPack.Literal.CLASS_A,
>>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>>> new ConditionStrategy(
>>>>>> MyPack.Literal.CLASS_B,
>>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>> I don't see that in 3.4
>>>>>
>>>>> Regards,
>>>>> Suresh Subramanian
>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>> news:gaqikq$a1d$1@build.eclipse.org...
>>>>>> Could you simple
>>>>>>
>>>>>> Base {
>>>>>> label: String
>>>>>> }
>>>>>>
>>>>>> A extend Base {
>>>>>>
>>>>>> }
>>>>>>
>>>>>> B extend Base {
>>>>>>
>>>>>> }
>>>>>>
>>>>>> Then observe the base attribute label? If you depend on name and text
>>>>>> somewhere else you could mark them as volatile and transient and
>>>>>> delegate calls to them to Base#get/setLabel().
>>>>>>
>>>>>> I think I can remember having looked at this Observable-Map problem
>>>>>> already and try to find a solution by make the observing somehow
>>>>>> conditional.
>>>>>>
>>>>>> Something like this:
>>>>>>
>>>>>> EMFObservables#observeConditionalMap(
>>>>>> tableViewerContentProvider.getKnownElements(),
>>>>>> new Condition[] {
>>>>>> new ConditionStrategy(
>>>>>> MyPack.Literal.CLASS_A,
>>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>>> new ConditionStrategy(
>>>>>> MyPack.Literal.CLASS_B,
>>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>>> }
>>>>>> )
>>>>>>
>>>>>> But it haven't had time to really think about it, maybe it is complete
>>>>>> nonesense anyways :-)
>>>>>>
>>>>>> Tom
>>>>>>
>>>>>> Suresh Subramanian schrieb:
>>>>>>> Tom,
>>>>>>>
>>>>>>> Thanks for your input. It is not working if i have 2 unrealted object
>>>>>>> types.It is only working for one single Type. So i guess it is not
>>>>>>> possible
>>>>>>> then.
>>>>>>>
>>>>>>> Regards,
>>>>>>> Suresh Subramanian
>>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>>>>>> Suresh Subramanian schrieb:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am trying to write Table Viewer which shows my model element and
>>>>>>>>> trying
>>>>>>>>> to use emf databinding for editing the model.
>>>>>>>>>
>>>>>>>>> I have 2different types of objects to display. For example
>>>>>>>>>
>>>>>>>>> Class A {
>>>>>>>>> name,
>>>>>>>>> description
>>>>>>>>> }
>>>>>>>>> Class B {
>>>>>>>>> text,
>>>>>>>>> description
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> First column should display the name if the object is instance of A
>>>>>>>>> and
>>>>>>>>> text
>>>>>>>>> if the object is B. In second column i need to
>>>>>>>>> display a description of the object.
>>>>>>>> 1. It would help to see the NPE and where it happens, it's possible
>>>>>>>> that
>>>>>>>> my LabelProvider has a bug.
>>>>>>>>
>>>>>>>> 2. I haven't looked at the implementation of EMObservales.observeMap
>>>>>>>> and
>>>>>>>> if it can deal with 2 completely unrelated object types at least
>>>>>>>> the
>>>>>>>> Bean implementation can't so if it works is an undocumented
>>>>>>>> feature.
>>>>>>>>
>>>>>>>> Tom
>>>>>>>>
>>>>>>>> --
>>>>>>>> B e s t S o l u t i o n . at
>>>>>>>> ------------------------------------------------------------ --------
>>>>>>>> Tom Schindl JFace-Committer
>>>>>>>> ------------------------------------------------------------ --------
>>>>>> --
>>>>>> B e s t S o l u t i o n . at
>>>>>> ------------------------------------------------------------ --------
>>>>>> Tom Schindl JFace-Committer
>>>>>> ------------------------------------------------------------ --------
>>>
>>
>> --
>> B e s t S o l u t i o n . at
>> ------------------------------------------------------------ --------
>> Tom Schindl JFace-Committer
>> ------------------------------------------------------------ --------
>
>
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422928 is a reply to message #422927] |
Fri, 19 September 2008 00:31 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Thanks Tom
"Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
news:gaur63$5vn$1@build.eclipse.org...
> http://download.eclipse.org/tools/orbit/downloads/drops/R200 80807152315/
>
> Tom
>
> Suresh Subramanian schrieb:
>> Tom,
>> I am trying to find org.apache.commons.lang.text plugin. do you know
>> where
>> can i find it.
>>
>> Regards,
>> Suresh Subramanian
>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>> news:gat1so$9f8$1@build.eclipse.org...
>>> And the label provider I referenced yesterday also works.
>>>
>>> Tom
>>>
>>> Tom Schindl schrieb:
>>>> Hi,
>>>>
>>>> With standard ObservableMapLabelProvider this already works in
>>>> EMF-Databinding because of the way EMF works :-)
>>>>
>>>> I guess the problem is may LabelProvider then.
>>>>
>>>> Tom
>>>>
>>>> Tom Schindl schrieb:
>>>>> Hi,
>>>>>
>>>>> I know its not there :-) Let me check and see how this could be done.
>>>>>
>>>>> Tom
>>>>>
>>>>> Suresh Subramanian schrieb:
>>>>>> Tom,
>>>>>>
>>>>>> Is it possible for you help me writing
>>>>>> EMFObservables#observeConditionalMap(
>>>>>> new Condition[] {
>>>>>>> new ConditionStrategy(
>>>>>>> MyPack.Literal.CLASS_A,
>>>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>>>> new ConditionStrategy(
>>>>>>> MyPack.Literal.CLASS_B,
>>>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>>> I don't see that in 3.4
>>>>>>
>>>>>> Regards,
>>>>>> Suresh Subramanian
>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>>> news:gaqikq$a1d$1@build.eclipse.org...
>>>>>>> Could you simple
>>>>>>>
>>>>>>> Base {
>>>>>>> label: String
>>>>>>> }
>>>>>>>
>>>>>>> A extend Base {
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>> B extend Base {
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>> Then observe the base attribute label? If you depend on name and
>>>>>>> text
>>>>>>> somewhere else you could mark them as volatile and transient and
>>>>>>> delegate calls to them to Base#get/setLabel().
>>>>>>>
>>>>>>> I think I can remember having looked at this Observable-Map problem
>>>>>>> already and try to find a solution by make the observing somehow
>>>>>>> conditional.
>>>>>>>
>>>>>>> Something like this:
>>>>>>>
>>>>>>> EMFObservables#observeConditionalMap(
>>>>>>> tableViewerContentProvider.getKnownElements(),
>>>>>>> new Condition[] {
>>>>>>> new ConditionStrategy(
>>>>>>> MyPack.Literal.CLASS_A,
>>>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>>>> new ConditionStrategy(
>>>>>>> MyPack.Literal.CLASS_B,
>>>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>>>> }
>>>>>>> )
>>>>>>>
>>>>>>> But it haven't had time to really think about it, maybe it is
>>>>>>> complete
>>>>>>> nonesense anyways :-)
>>>>>>>
>>>>>>> Tom
>>>>>>>
>>>>>>> Suresh Subramanian schrieb:
>>>>>>>> Tom,
>>>>>>>>
>>>>>>>> Thanks for your input. It is not working if i have 2 unrealted
>>>>>>>> object
>>>>>>>> types.It is only working for one single Type. So i guess it is not
>>>>>>>> possible
>>>>>>>> then.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Suresh Subramanian
>>>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>>>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>>>>>>> Suresh Subramanian schrieb:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I am trying to write Table Viewer which shows my model element
>>>>>>>>>> and
>>>>>>>>>> trying
>>>>>>>>>> to use emf databinding for editing the model.
>>>>>>>>>>
>>>>>>>>>> I have 2different types of objects to display. For example
>>>>>>>>>>
>>>>>>>>>> Class A {
>>>>>>>>>> name,
>>>>>>>>>> description
>>>>>>>>>> }
>>>>>>>>>> Class B {
>>>>>>>>>> text,
>>>>>>>>>> description
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> First column should display the name if the object is instance of
>>>>>>>>>> A
>>>>>>>>>> and
>>>>>>>>>> text
>>>>>>>>>> if the object is B. In second column i need to
>>>>>>>>>> display a description of the object.
>>>>>>>>> 1. It would help to see the NPE and where it happens, it's
>>>>>>>>> possible
>>>>>>>>> that
>>>>>>>>> my LabelProvider has a bug.
>>>>>>>>>
>>>>>>>>> 2. I haven't looked at the implementation of
>>>>>>>>> EMObservales.observeMap
>>>>>>>>> and
>>>>>>>>> if it can deal with 2 completely unrelated object types at least
>>>>>>>>> the
>>>>>>>>> Bean implementation can't so if it works is an undocumented
>>>>>>>>> feature.
>>>>>>>>>
>>>>>>>>> Tom
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> B e s t S o l u t i o n . at
>>>>>>>>> ------------------------------------------------------------ --------
>>>>>>>>> Tom Schindl
>>>>>>>>> JFace-Committer
>>>>>>>>> ------------------------------------------------------------ --------
>>>>>>> --
>>>>>>> B e s t S o l u t i o n . at
>>>>>>> ------------------------------------------------------------ --------
>>>>>>> Tom Schindl JFace-Committer
>>>>>>> ------------------------------------------------------------ --------
>>>>
>>>
>>> --
>>> B e s t S o l u t i o n . at
>>> ------------------------------------------------------------ --------
>>> Tom Schindl JFace-Committer
>>> ------------------------------------------------------------ --------
>>
>>
>
>
> --
> B e s t S o l u t i o n . at
> ------------------------------------------------------------ --------
> Tom Schindl JFace-Committer
> ------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #422997 is a reply to message #422894] |
Sat, 20 September 2008 15:54 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
This is a multi-part message in MIME format.
------=_NextPart_000_001A_01C91AFE.785AED10
Content-Type: text/plain;
charset="ISO-8859-15"
Content-Transfer-Encoding: quoted-printable
Tom
I am not sure how to make this work. Here is my mode Structure
Class X {
String text;
String description
}
Class A extends X {
}
Class B extends X {
String name;
}
I am setting the viewer input with a list which contains instance of =
both A and B.
if the list element is instance of A i need to display text in the =
column 0 and if it is instance of B i need to display Name.
I am trying use the ObservableMapLabelProvider but i gives me =
compilation error
Description Resource Path Location Type
The method setLabelProvider(CellLabelProvider) in the type ViewerColumn =
is not applicable for the arguments (ObservableMapLabelProvider) =
myPage.java myPlugin/src/myEditorPage.java line 277 Java Problem
if i want to try the condition approach i don't find ConditionStrategy =
and Condition. I am still kind of struck. Is there a sample code i can =
look for.Please let me know
Regards,
Suresh Subramanian
"Tom Schindl" <tom.schindl@bestsolution.at> wrote in message =
news:gat1so$9f8$1@build.eclipse.org...
> And the label provider I referenced yesterday also works.
>=20
> Tom
>=20
> Tom Schindl schrieb:
>> Hi,
>>=20
>> With standard ObservableMapLabelProvider this already works in
>> EMF-Databinding because of the way EMF works :-)
>>=20
>> I guess the problem is may LabelProvider then.
>>=20
>> Tom
>>=20
>> Tom Schindl schrieb:
>>> Hi,
>>>
>>> I know its not there :-) Let me check and see how this could be =
done.
>>>
>>> Tom
>>>
>>> Suresh Subramanian schrieb:
>>>> Tom,
>>>>
>>>> Is it possible for you help me writing
>>>> EMFObservables#observeConditionalMap(
>>>> new Condition[] {
>>>>> new ConditionStrategy(
>>>>> MyPack.Literal.CLASS_A,
>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>> new ConditionStrategy(
>>>>> MyPack.Literal.CLASS_B,
>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>> I don't see that in 3.4
>>>>
>>>> Regards,
>>>> Suresh Subramanian
>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message=20
>>>> news:gaqikq$a1d$1@build.eclipse.org...
>>>>> Could you simple
>>>>>
>>>>> Base {
>>>>> label: String
>>>>> }
>>>>>
>>>>> A extend Base {
>>>>>
>>>>> }
>>>>>
>>>>> B extend Base {
>>>>>
>>>>> }
>>>>>
>>>>> Then observe the base attribute label? If you depend on name and =
text
>>>>> somewhere else you could mark them as volatile and transient and
>>>>> delegate calls to them to Base#get/setLabel().
>>>>>
>>>>> I think I can remember having looked at this Observable-Map =
problem
>>>>> already and try to find a solution by make the observing somehow
>>>>> conditional.
>>>>>
>>>>> Something like this:
>>>>>
>>>>> EMFObservables#observeConditionalMap(
>>>>> tableViewerContentProvider.getKnownElements(),
>>>>> new Condition[] {
>>>>> new ConditionStrategy(
>>>>> MyPack.Literal.CLASS_A,
>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>> new ConditionStrategy(
>>>>> MyPack.Literal.CLASS_B,
>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>> }
>>>>> )
>>>>>
>>>>> But it haven't had time to really think about it, maybe it is =
complete
>>>>> nonesense anyways :-)
>>>>>
>>>>> Tom
>>>>>
>>>>> Suresh Subramanian schrieb:
>>>>>> Tom,
>>>>>>
>>>>>> Thanks for your input. It is not working if i have 2 unrealted =
object
>>>>>> types.It is only working for one single Type. So i guess it is =
not=20
>>>>>> possible
>>>>>> then.
>>>>>>
>>>>>> Regards,
>>>>>> Suresh Subramanian
>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>>>>> Suresh Subramanian schrieb:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I am trying to write Table Viewer which shows my model element =
and
>>>>>>>> trying
>>>>>>>> to use emf databinding for editing the model.
>>>>>>>>
>>>>>>>> I have 2different types of objects to display. For example
>>>>>>>>
>>>>>>>> Class A {
>>>>>>>> name,
>>>>>>>> description
>>>>>>>> }
>>>>>>>> Class B {
>>>>>>>> text,
>>>>>>>> description
>>>>>>>> }
>>>>>>>>
>>>>>>>> First column should display the name if the object is instance =
of A and
>>>>>>>> text
>>>>>>>> if the object is B. In second column i need to
>>>>>>>> display a description of the object.
>>>>>>> 1. It would help to see the NPE and where it happens, it's =
possible that
>>>>>>> my LabelProvider has a bug.
>>>>>>>
>>>>>>> 2. I haven't looked at the implementation of =
EMObservales.observeMap and
>>>>>>> if it can deal with 2 completely unrelated object types at =
least the
>>>>>>> Bean implementation can't so if it works is an undocumented =
feature.
>>>>>>>
>>>>>>> Tom
>>>>>>>
>>>>>>> --=20
>>>>>>> B e s t S o l u t i o n . at
>>>>>>> =
------------------------------------------------------------ --------
>>>>>>> Tom Schindl =
JFace-Committer
>>>>>>> =
------------------------------------------------------------ --------=20
>>>>> --=20
>>>>> B e s t S o l u t i o n . at
>>>>> =
------------------------------------------------------------ --------
>>>>> Tom Schindl =
JFace-Committer
>>>>> =
------------------------------------------------------------ --------=20
>>>
>>=20
>>=20
>=20
>=20
> --=20
> B e s t S o l u t i o n . at
> ------------------------------------------------------------ --------
> Tom Schindl JFace-Committer
> ------------------------------------------------------------ --------
------=_NextPart_000_001A_01C91AFE.785AED10
Content-Type: text/html;
charset="ISO-8859-15"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-15">
<META content=3D"MSHTML 6.00.2900.3354" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>Tom</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>I am not sure how to make this =
work. Here is=20
my mode Structure</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Class X {</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>String text;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>String description</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Class A extends X {</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Class B extends X {</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>String name;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>}</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>I am setting the viewer input with a =
list which=20
contains instance of both A and B.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>if the list element is instance of A i =
need to=20
display text in the column 0 and if it is instance of B i need to =
display=20
Name.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>I am trying use the =
ObservableMapLabelProvider but=20
i gives me compilation error</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial color=3D#ff0000=20
size=3D2><STRONG> Description Resource Path Locatio n T=
ype<BR>The=20
method setLabelProvider(CellLabelProvider) in the type ViewerColumn is =
not=20
applicable for the arguments =
(ObservableMapLabelProvider) myPage.java=20
myPlugin/src/myEditorPage.java line 277 Java=20
Problem<BR></STRONG></FONT><FONT face=3DArial color=3D#ff0000=20
size=3D2><STRONG></STRONG></FONT></DIV>
<DIV><FONT face=3DArial color=3D#ff0000 size=3D2><FONT =
color=3D#000000>if i want to try=20
the condition approach i don't find ConditionStrategy and Condition. I =
am still=20
kind of struck. Is there a sample code i can look for.Please let me=20
know</FONT></FONT></DIV>
<DIV><FONT face=3DArial color=3D#ff0000 size=3D2><FONT=20
color=3D#000000></FONT></FONT> </DIV>
<DIV><FONT face=3DArial color=3D#ff0000 size=3D2><FONT=20
color=3D#000000>Regards,</FONT></FONT></DIV>
<DIV><FONT face=3DArial color=3D#ff0000 size=3D2><FONT =
color=3D#000000>Suresh=20
Subramanian</FONT></DIV></FONT>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>"Tom Schindl" <</FONT><A=20
href=3D"mailto:tom.schindl@bestsolution.at"><FONT face=3DArial=20
size=3D2>tom.schindl@bestsolution.at</FONT></A><FONT face=3DArial =
size=3D2>> wrote=20
in message </FONT><A href=3D"news:gat1so$9f8$1@build.eclipse.org"><FONT =
face=3DArial=20
size=3D2>news:gat1so$9f8$1@build.eclipse.org</FONT></A><FONT =
face=3DArial=20
size=3D2>...</FONT></DIV><FONT face=3DArial size=3D2>> And the label =
provider I=20
referenced yesterday also works.<BR>> <BR>> Tom<BR>> <BR>> =
Tom=20
Schindl schrieb:<BR>>> Hi,<BR>>> <BR>>> With standard=20
ObservableMapLabelProvider this already works in<BR>>> =
EMF-Databinding=20
because of the way EMF works :-)<BR>>> <BR>>> I guess the =
problem is=20
may LabelProvider then.<BR>>> <BR>>> Tom<BR>>> =
<BR>>>=20
Tom Schindl schrieb:<BR>>>> Hi,<BR>>>><BR>>>> =
I know=20
its not there :-) Let me check and see how this could be=20
done.<BR>>>><BR>>>> =
Tom<BR>>>><BR>>>> Suresh=20
Subramanian schrieb:<BR>>>>>=20
Tom,<BR>>>>><BR>>>>> Is it possible for you help =
me=20
writing<BR>>>>>=20
EMFObservables#observeConditionalMap(<BR>>>>> new =
Condition[]=20
{<BR> >>>>> =
=20
new=20
ConditionStrategy(<BR> >>>>> &=
nbsp; & nbsp; =20
MyPack.Literal.CLASS_A,<BR> >>>>> &n=
bsp; &n bsp; =20
MyPack.Literal.CLASS_A_ATTR_A),<BR> >>>>> =
=20
new=20
ConditionStrategy(<BR> >>>>> &=
nbsp; & nbsp; =20
MyPack.Literal.CLASS_B,<BR> >>>>> &n=
bsp; &n bsp; =20
MyPack.Literal.CLASS_B_ATTR_B)<BR>>>>> I don't see that in=20
3.4<BR>>>>><BR>>>>> Regards,<BR>>>>> =
Suresh=20
Subramanian<BR>>>>> "Tom Schindl" <</FONT><A=20
href=3D"mailto:tom.schindl@bestsolution.at"><FONT face=3DArial=20
size=3D2>tom.schindl@bestsolution.at</FONT></A><FONT face=3DArial =
size=3D2>> wrote=20
in message <BR>>>>> </FONT><A=20
href=3D"news:gaqikq$a1d$1@build.eclipse.org"><FONT face=3DArial=20
size=3D2>news:gaqikq$a1d$1@build.eclipse.org</FONT></A><FONT =
face=3DArial=20
size=3D2>...<BR>>>>>> Could you=20
simple<BR>>>>>><BR>>>>>> Base=20
{<BR>>>>>> label: String<BR>>>>>>=20
}<BR>>>>>><BR>>>>>> A extend Base=20
{<BR>>>>>><BR>>>>>>=20
}<BR>>>>>><BR>>>>>> B extend Base=20
{<BR>>>>>><BR>>>>>>=20
}<BR>>>>>><BR>>>>>> Then observe the base=20
attribute label? If you depend on name and text<BR>>>>>>=20
somewhere else you could mark them as volatile and transient=20
and<BR>>>>>> delegate calls to them to=20
Base#get/setLabel().<BR>>>>>> <BR>>>>>> I =
think I=20
can remember having looked at this Observable-Map=20
problem<BR>>>>>> already and try to find a solution by =
make the=20
observing somehow<BR>>>>>>=20
conditional.<BR>>>>>><BR >>>>>> Something =
like=20
this:<BR>>>>>><BR>>>>>>=20
EMFObservables#observeConditionalMap(<BR>>>>>>=20
tableViewerContentProvider.getKnownElements(),<BR>>>>>> =
new=20
Condition[]=20
{<BR> >>>>> =
=20
new=20
ConditionStrategy(<BR> >>>>> &=
nbsp; & nbsp; =20
MyPack.Literal.CLASS_A,<BR> >>>>> &n=
bsp; &n bsp; =20
MyPack.Literal.CLASS_A_ATTR_A),<BR> >>>>> =
=20
new=20
ConditionStrategy(<BR> >>>>> &=
nbsp; & nbsp; =20
MyPack.Literal.CLASS_B,<BR> >>>>> &n=
bsp; &n bsp; =20
MyPack.Literal.CLASS_B_ATTR_B)<BR>>>>>> =20
}<BR>>>>>> =
)<BR>>>>>><BR>>>>>> But=20
it haven't had time to really think about it, maybe it is=20
complete<BR>>>>>> nonesense anyways=20
:-)<BR>>>>>><BR>>>>>>=20
Tom<BR>>>>>><BR>>>>>> Suresh Subramanian=20
schrieb:<BR>>>>>>>=20
Tom,<BR>>>>>>><BR >>>>>>> Thanks for =
your=20
input. It is not working if i have 2 unrealted=20
object<BR>>>>>>> types.It is only working for one =
single Type.=20
So i guess it is not <BR>>>>>>>=20
possible<BR>>>>>>>=20
then.<BR>>>>>>><BR >>>>>>>=20
Regards,<BR>>>>>>> Suresh=20
Subramanian<BR>>>>>>> "Tom Schindl" <</FONT><A=20
href=3D"mailto:tom.schindl@bestsolution.at"><FONT face=3DArial=20
size=3D2>tom.schindl@bestsolution.at</FONT></A><FONT face=3DArial =
size=3D2>> wrote=20
in message<BR>>>>>>> </FONT><A=20
href=3D"news:gaqdnp$fs9$1@build.eclipse.org"><FONT face=3DArial=20
size=3D2>news:gaqdnp$fs9$1@build.eclipse.org</FONT></A><FONT =
face=3DArial=20
size=3D2>...<BR>>>>>>>> Suresh Subramanian=20
schrieb:<BR> >>>>>>>& ;gt;=20
Hi,<BR> >>>>>>>& ;gt; <BR> >>>>>>>& ;g=
t; I am=20
trying to write Table Viewer which shows my model element=20
and<BR> >>>>>>>& ;gt;=20
trying<BR> >>>>>>>& ;gt; to use emf databinding for =
editing=20
the=20
model.<BR> >>>>>>>& ;gt; <BR>>>>>>>>=
;> I=20
have 2different types of objects to display. For=20
example<BR> >>>>>>>& ;gt; <BR>>>>>>>&g=
t;>=20
Class A {<BR> >>>>>>>& ;gt;=20
name,<BR> >>>>>>>& ;gt;=20
description<BR> >>>>>>>& ;gt;=20
}<BR> >>>>>>>& ;gt; Class B=20
{<BR> >>>>>>>& ;gt; =
text,<BR> >>>>>>>& ;gt;=20
description<BR> >>>>>>>& ;gt;=20
}<BR> >>>>>>>& ;gt; <BR> >>>>>>>& ;gt;=
First=20
column should display the name if the object is instance of A=20
and<BR> >>>>>>>& ;gt; =
text<BR> >>>>>>>& ;gt;=20
if the object is B. In second column i need=20
to<BR> >>>>>>>& ;gt; display a description of the=20
object.<BR>>>>>>>> 1. It would help to see the NPE =
and=20
where it happens, it's possible =
that<BR> >>>>>>>& ;nbsp; =20
my LabelProvider has a=20
bug.<BR>>>>>>>> <BR>>>>>>>> 2. =
I=20
haven't looked at the implementation of EMObservales.observeMap=20
and<BR> >>>>>>>& ;nbsp; if it can deal with 2 =
completely=20
unrelated object types at least =
the<BR> >>>>>>>& ;nbsp; =20
Bean implementation can't so if it works is an undocumented=20
feature.<BR>>>>>>>> <BR>>>>>>>> =
Tom<BR>>>>>>>> <BR>>>>>>>> --=20
<BR>>>>>>>> B e s t S o l u t i o n .=20
at<BR>>>>>>>>=20
------------------------------------------------------------ -------- <BR>&=
gt;>>>>>>=20
Tom=20
Schindl &am p;nbsp; =
&=
nbsp; & nbsp; & n=
bsp; =20
JFace-Committer<BR>>>>>>>>=20
------------------------------------------------------------ --------=20
<BR>>>>>> -- <BR>>>>>> B e s t S o l u t i =
o n .=20
at<BR>>>>>>=20
------------------------------------------------------------ -------- <BR>&=
gt;>>>>=20
Tom=20
Schindl &am p;nbsp; =
&=
nbsp; & nbsp; & n=
bsp; =20
JFace-Committer<BR>>>>>>=20
------------------------------------------------------------ --------=20
<BR>>>><BR>>> <BR>>> <BR>> <BR>> <BR>> -- =
<BR>>=20
B e s t S o l u t i o n . at<BR>>=20
------------------------------------------------------------ -------- <BR>&=
gt; Tom=20
Schindl &am p;nbsp; =
&=
nbsp; & nbsp; & n=
bsp; =20
JFace-Committer<BR>>=20
------------------------------------------------------------ -------- </FON=
T></BODY></HTML>
------=_NextPart_000_001A_01C91AFE.785AED10--
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #423000 is a reply to message #422997] |
Sat, 20 September 2008 18:38 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
This is a multi-part message in MIME format.
--------------040207060504060909090905
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: 7bit
The ObservableMapLabelProvider is not assigned to a column but to a
viewer and it won't work for you!
The ConditionStrategy, ... is only something I thought about. We are
currently looking into this problem area in bug [1] but as stated before
EMF doesn't has issues with it. It's only the LabelProvider which
doesn't work.
Please take a look at the attached project and use the LabelProvider
from there.
Tom
[1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=247997
Suresh Subramanian schrieb:
> Tom
>
> I am not sure how to make this work. Here is my mode Structure
>
> Class X {
> String text;
> String description
> }
>
> Class A extends X {
> }
> Class B extends X {
> String name;
> }
>
> I am setting the viewer input with a list which contains instance of
> both A and B.
>
> if the list element is instance of A i need to display text in the
> column 0 and if it is instance of B i need to display Name.
>
> I am trying use the ObservableMapLabelProvider but i gives me
> compilation error
>
> *Description Resource Path Location Type
> The method setLabelProvider(CellLabelProvider) in the type ViewerColumn
> is not applicable for the arguments
> (ObservableMapLabelProvider) myPage.java
> myPlugin/src/myEditorPage.java line 277 Java Problem
> ***
> if i want to try the condition approach i don't find ConditionStrategy
> and Condition. I am still kind of struck. Is there a sample code i can
> look for.Please let me know
>
> Regards,
> Suresh Subramanian
>
>
> "Tom Schindl" <tom.schindl@bestsolution.at
> <mailto:tom.schindl@bestsolution.at>> wrote in message
> news:gat1so$9f8$1@build.eclipse.org...
>> And the label provider I referenced yesterday also works.
>>
>> Tom
>>
>> Tom Schindl schrieb:
>>> Hi,
>>>
>>> With standard ObservableMapLabelProvider this already works in
>>> EMF-Databinding because of the way EMF works :-)
>>>
>>> I guess the problem is may LabelProvider then.
>>>
>>> Tom
>>>
>>> Tom Schindl schrieb:
>>>> Hi,
>>>>
>>>> I know its not there :-) Let me check and see how this could be done.
>>>>
>>>> Tom
>>>>
>>>> Suresh Subramanian schrieb:
>>>>> Tom,
>>>>>
>>>>> Is it possible for you help me writing
>>>>> EMFObservables#observeConditionalMap(
>>>>> new Condition[] {
>>>>>> new ConditionStrategy(
>>>>>> MyPack.Literal.CLASS_A,
>>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>>> new ConditionStrategy(
>>>>>> MyPack.Literal.CLASS_B,
>>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>> I don't see that in 3.4
>>>>>
>>>>> Regards,
>>>>> Suresh Subramanian
>>>>> "Tom Schindl" <tom.schindl@bestsolution.at
> <mailto:tom.schindl@bestsolution.at>> wrote in message
>>>>> news:gaqikq$a1d$1@build.eclipse.org...
>>>>>> Could you simple
>>>>>>
>>>>>> Base {
>>>>>> label: String
>>>>>> }
>>>>>>
>>>>>> A extend Base {
>>>>>>
>>>>>> }
>>>>>>
>>>>>> B extend Base {
>>>>>>
>>>>>> }
>>>>>>
>>>>>> Then observe the base attribute label? If you depend on name and text
>>>>>> somewhere else you could mark them as volatile and transient and
>>>>>> delegate calls to them to Base#get/setLabel().
>>>>>>
>>>>>> I think I can remember having looked at this Observable-Map problem
>>>>>> already and try to find a solution by make the observing somehow
>>>>>> conditional.
>>>>>>
>>>>>> Something like this:
>>>>>>
>>>>>> EMFObservables#observeConditionalMap(
>>>>>> tableViewerContentProvider.getKnownElements(),
>>>>>> new Condition[] {
>>>>>> new ConditionStrategy(
>>>>>> MyPack.Literal.CLASS_A,
>>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>>> new ConditionStrategy(
>>>>>> MyPack.Literal.CLASS_B,
>>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>>> }
>>>>>> )
>>>>>>
>>>>>> But it haven't had time to really think about it, maybe it is complete
>>>>>> nonesense anyways :-)
>>>>>>
>>>>>> Tom
>>>>>>
>>>>>> Suresh Subramanian schrieb:
>>>>>>> Tom,
>>>>>>>
>>>>>>> Thanks for your input. It is not working if i have 2 unrealted object
>>>>>>> types.It is only working for one single Type. So i guess it is not
>>>>>>> possible
>>>>>>> then.
>>>>>>>
>>>>>>> Regards,
>>>>>>> Suresh Subramanian
>>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at
> <mailto:tom.schindl@bestsolution.at>> wrote in message
>>>>>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>>>>>> Suresh Subramanian schrieb:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am trying to write Table Viewer which shows my model element and
>>>>>>>>> trying
>>>>>>>>> to use emf databinding for editing the model.
>>>>>>>>>
>>>>>>>>> I have 2different types of objects to display. For example
>>>>>>>>>
>>>>>>>>> Class A {
>>>>>>>>> name,
>>>>>>>>> description
>>>>>>>>> }
>>>>>>>>> Class B {
>>>>>>>>> text,
>>>>>>>>> description
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> First column should display the name if the object is instance
> of A and
>>>>>>>>> text
>>>>>>>>> if the object is B. In second column i need to
>>>>>>>>> display a description of the object.
>>>>>>>> 1. It would help to see the NPE and where it happens, it's
> possible that
>>>>>>>> my LabelProvider has a bug.
>>>>>>>>
>>>>>>>> 2. I haven't looked at the implementation of
> EMObservales.observeMap and
>>>>>>>> if it can deal with 2 completely unrelated object types at
> least the
>>>>>>>> Bean implementation can't so if it works is an undocumented
> feature.
>>>>>>>>
>>>>>>>> Tom
>>>>>>>>
>>>>>>>> --
>>>>>>>> B e s t S o l u t i o n . at
>>>>>>>> ------------------------------------------------------------ --------
>>>>>>>> Tom Schindl JFace-Committer
>>>>>>>>
> ------------------------------------------------------------ --------
>>>>>> --
>>>>>> B e s t S o l u t i o n . at
>>>>>> ------------------------------------------------------------ --------
>>>>>> Tom Schindl JFace-Committer
>>>>>> ------------------------------------------------------------ --------
>>>>
>>>
>>>
>>
>>
>> --
>> B e s t S o l u t i o n . at
>> ------------------------------------------------------------ --------
>> Tom Schindl JFace-Committer
>> ------------------------------------------------------------ --------
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
--------------040207060504060909090905
Content-Type: application/x-zip-compressed;
name="test.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="test.zip"
UEsDBBQACAAIAEGkNDkAAAAAAAAAAAAAAAAbAAAAdGVzdC5jb25kb2JzLm1h cC8uY2xhc3Nw
YXRolZBBawIxEIXP+iuW3J2tQqGHXaWULSjUFt16lZgM67TpJJ0kpf77VlpR ChW8zRu+92Z4
1eTzzRUfKJE812oIV6pANt4Sd7V6bu8HN2oy7lfG6RiDTttxv3cUyEl2xSux rVUUo4r98mcs
/wWN5wPopQM0jkJEeLEJnM5stt+nYbZo1neP8/Z2Om8W5V+OOKGwdmBxkzvI 9OtEgWXSbLXY
1UO7C1jORstmMITry/8JFsF4QRB8zyRon1zuiOOZJJ9TyOkQtiHes1V50t0X UEsHCJS4/mLM
AAAAbwEAAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAAAAAAGQAAAHRlc3QuY29u ZG9icy5tYXAv
LnByb2plY3S9ks9qAjEQxs/6FLJ3k/bWQ1xBS28tBe0DxGRcI5tJSLLSx+9k NytVEATB2/fN
fJNf/onlr21nJwjROFxUr+ylmgEqpw02i+pn+zF/q5b1VPjgjqDSO0QVjE8U rqcTgdJCnSAm
phxqt4vMSi94X6a2ctYCplrwUVGxrBSz5v/NrjOt3nhQZIpb05hEnQsF5kLD QLXGR2BHnbmB
hDzJPg/hDKcBGZouU+Ng+YUX/JpwD9JrYJ8SzZ7OvHoacaMOYOXDvFIoV0yo 1AUYooO+fbtD
P6P73I2RvNfvtmsMfl3nR0m486tffKY/UEsHCPXpFFjoAAAAiQIAAFBLAwQU AAgACABBpDQ5
AAAAAAAAAAAAAAAAJQAAAHRlc3QuY29uZG9icy5tYXAvTUVUQS1JTkYvTUFO SUZFU1QuTUaF
Us1vgjAUv/NXEJPdRiMYLxgP28JlmYuZye6P8sS39YO1hYh//YqIkrnorc3v 8712BYq2aF30
icaSVmkYs2nwXKtCYLQ6gWcsGZB3kJiGD5WoS1LdZQA2rcy1IN4TnBczrlWh c8skVAtLqhTo
vNfSmfqsGodf4l8EWLsGt0tDdmF6M9NFG91QgWYc/qY5CDqAO3r15QbsA39q Mlhke+R1R8hU
Q0Yricql4WuyyaKYzYNsX2njojXwbyj9BF15X/wxGE6MZCVGV+8lgpN51Gel oTYlQy6osujH
N8hMrRxJ9LoxhHLrzx5fNGQpJ0GuTZcG8VjiD7mmRd6P0vTbWk5mbM6mkz+8 Y14BDnJShV/3
lSpmybWqq3JbNL0WfW2B38+K7zVkOYKyt3tCBXzXSaXUyjIB/4QlbOYFw4M/ cUfN8Susuw/Z
pqGAQxv8AlBLBwiiAPXnTAEAAPECAABQSwMEFAAIAAgAQaQ0OQAAAAAAAAAA AAAAACcAAAB0
ZXN0LmNvbmRvYnMubWFwL2Jpbi9IZWxsb1dvcmxkJDEuY2xhc3OFUttu00AQ PdukdessTQg0
5VZC0rTNBeqGayUQEiogKgWQCLQCnhx7lWy1XUe204pHPgN+gGckaBFIfACf wkcAs06k8FLF
0sqzZ2bnnLn8+vP9J4AmNi1MMfAnQqlgNwiVX2laSDPk9twD11Gu7jrPO3vC iy3MMOTH6IuB
1m5HCYbMgasqvoz6yn3HUGoFYdcRnpL9SDjRYewcSr8r4sh5OAy5yzBzT2oZ 32eoVCdG13YY
0luBL+bAcIrDwqyNFLIcc8gxpKomINuSWjwb7HdE+HIoKt8KPFftuKE09xGY jnsyYphv/V8u
6UmFA21hkWHpJDXtHr2wUcB5w2vbuIglC5cY7HEqjssoMsx6oXBj8WqboXxy eUlCKs7kLHGU
TS3poC+0jQpWLawwFCe0hmMNVaqd6PwH2jeoG3u9pCdvTJo6R8NETEdKiL5h usaxbhBbRiY8
iIRv3EYL8U0QS8/awSD0xGNpmpkdV75u1oKQR9pTQSR196mIewE15BZuU1n7 rtQMherb1nh9
2nFIccl0+bbWItxSbhSJCBs05hSdabBc3kyb1nSKDnWd0AxZm3Q3iF1vfAWv H2P+cxJz2mCJ
x7wuIk8WJ9ugZ3A2wReQG2V5TywmtvkDhdf1L+DHONdqfMOFxhGufMKCgY6w /BGZoVXbJcfV
D39/j8nKibgSkvFhmShWsIhVQtZQI3sD9UREYUg0EsHJ44zKbCa5ruMG/dO0 UzdxJ5HLEtn0
/QNQSwcIj8SV/S4CAACoAwAAUEsDBBQACAAIAEGkNDkAAAAAAAAAAAAAAAAn AAAAdGVzdC5j
b25kb2JzLm1hcC9iaW4vSGVsbG9Xb3JsZCQyLmNsYXNzjVNpU9NQFD2vLaRL 2Iog7oAsbVmC
dUOKS1uKVNMClmVGP6XJs4RJEyZJYfxZOjpO/eD42f/gX3G8SWspwgwmk7z7 7jvv3nPPu+/n
72/fAdzDroAAg7jBDcPat2xDm0oLCDHMWnZN4qqhHzlcck5ciR9z03WkCje4 6uqWmdWUI5fb
DD3HijGlMgzLqmVqdeVIylumq+gmtzMMvau6qbvPGEYTF6wn9xhCeUvjETDE RPSgN4og+kQI
6GcIJjzAgEzYcqNe5faOUjU4Q1y2VMXYU2zdm7edIfdAdxj65e5aiEH/ia7V uNsizjWGVEK+
rLiCNyd2EYxiTMBVot9F3hvXFdW17A8iruE6Q4QXy5WdbDlfYBiTL4ZmYhTs pohbuM0gqDZX
XJ5l6EskOxuymTDGGQLZdAyTmBJwl0J3FkVMY4bqdLhL+0YS8qFyrEiGYtak imvrZo0Ix5BA
SkCSYeic2iLmME8ykxgFg9e9ihmmKX23Grz+XlKtet0ypYarG1JB1h2XqC9i SYDEMHEpWKSu
StPZKZr2D8vN6iHJm0m+9ZR4IOIhHnWUyJ1VIkdKLJMSOVJiBasCMl1K5EQ8 /atEzqP2XMQL
kCZBKs3LWUyezxpGnnq1zE/Gs2EU2iZlZdQ6s//ZEIRWSMCu8yJPtduTI0+0 YjVsla/rXlcO
nHbjoseJPAVTNSyHzqvE3QNLE7BFe05hIt6gwhBu6bJbZJg837CtniaCB7TP v0Zi0aQzzhuK
43AHS3SfgnTB2WDcu1RkBegTECZ/hKxlmnueaGruC/2+QvzoYwY8n79CCmEN g2SJZHveIcR9
/zCutKP8ImSIxsYnjDRxg6E0H7/TxEQAqc+INjHLMN/EQgD7PuA+Q3kh/riJ J12AhRagMw82
8SyAH5iM585GCrUXVuJrfoRTwjM+mdf0l4lkCRPYRApbSGMbOVTwDjtwsesX k2oRbhfjWet4
6ZdjYANFipiiSK/oC9Ir+zlKKNMYoqjbFMmTgvmS0PMHUEsHCFuqCIn0AgAA SAUAAFBLAwQU
AAgACABBpDQ5AAAAAAAAAAAAAAAAJQAAAHRlc3QuY29uZG9icy5tYXAvYmlu L0hlbGxvV29y
bGQuY2xhc3O1VwlXG9cV/h7bgBjHmDiucRNjOyQWYCIwce2A40QSwqYW2EEY ShyXjKQHjDOa
UUcjiJu6cdMlTvc1XdM2bbpviduyRE26b+ne/p+efm8ESKzGJ6dwjt5I7869 9/vu9t4b/331
dQBd+I+GCoHAGWlZzpjjWmkNVQINl40ZI2QZ9lToXPKyTHkCNSdN2/ROCVQG W0cFqqJOWgZQ
iTod1agR2Bk3bTmUzySlO2IkLSnQGHdShjVquKb6vvRjlTdt5gT0eMliL3/N GKYtsCd4MV6y
nPBc057qbR3VsEug2XGnQjJlmdmcDOVmvdCsmZ6SXi7UZ+aylnElgAbUBbAb ezTcIdBZLn55
0kjJUNrwjKRpp6nUV5AYGzmXzEl3RnmW0/EW7BWopc5haVgZgeFg/CY2e1tX SaQcd7UVZ0V9
yNfZq2EfsZegt3QF0IQ7FYV3CbRsw+BoAM04qOGAQMct2dZxCHcL3Obm7THT m+6Tk0beYlz7
g7eIoSxCw3nbVju9fkYY7hQje/sGIRTQ0kUAAgdvipFBSLnS8OSFAYFDm3OS mCaPfnq0U+1a
KWpy8l7otGum4/5jAG0qQe5Dp4aQwF1bqtVZGkcF6nLSK74tcPfmnhRFfFfu ZxjXp96MKWel
S0Ez5436zwF0420q7scF7t1cc9TJZJ2c6Uk/8t14QEcPyFCAu1HH9lzHUp61 bqHAF2LmPbhB
DZWR1MeYB3ASDymnHmY4gwPKZAR9GqJblN+SAR0x9AvsWCFM6RO4Ixhf20p8 ms4IRLeu0GXK
SiWqyFPWpO2dd50ZM61YPK1i2o2zOuIYZM/JybUyAqHV/K4OycAacd+9cwI9 262KjJENDZS8
HDSyyqtHdAwjwU5Kks7azqwds2SGZlghp4LbbxuEU648Ib3eOlzAmAZWXHPK sdPKfLS4njdS
TxhTsiXOfHENiy3tHRhnJMMTE2FW0iqjMjPJZ2U5FvZYpck8cyyAi7ik4TGB trWy5f7FBvtX
Nc53YoIZWfRa4Rd4aftNZQOEmznKbpJPeXlC62d7yLvyFvrv+ij5RBo6kj5H kYmJiIY0+0JJ
KOpY+YwdN5LSWs6OWkxSuOWpzqsBpDCtasVUk+Lim3Fko5mnkvoJHRY4iBr8 oirzQqBry5SO
GDm56gVfoYCjI4t3CdQX++sgR7ilarQ1XpZJHkcx31DsMLYe8uzp0XNDI+GB odjwxEQsHhuM
DY0ktkioYTkpXWmnigk1q+NJsPHXLyWIKmOB54Kbvb3UJf4fSWDRdDn5ypVe xfRTOt6j2lct
mR6ws3lPw3sF9m/W8yJ5z3PsAK7imsqA9wkc3k4LZ0Otxft5lCLx5uQV9f4H dXwIz3I+0vCI
fNJb0zHLjkDPrT44HA3gOj6irH9UnZs2CKAK+VV8XMcn8EmB3UY6nZAWmTUd W+GWtsqjjvV+
yxnVpkLrhP0hL9i/mm8ykSk1w6G2RYKWxiCFK7KUjm0gfcvToHiQzNLFB99U PdInK6twbtkK
FM4Ua2MD6rmTFDiwKU/F/GGJfR3f0PAiA7imk/cbKc9xr+j4Jl7iKUQODCVG wkPRmMDe+Mai
vfVU9m0d31H1vbNY3ysOqb3v6fg+fsBMK+5xIOwoq/twby1+RNzhrnr8BK9o eJlmVzZ13FBJ
WsUkDdfjZ5jT8HOBXeuA65jHAiudIEvj7p41407VcsrJZBw7lPdMKxTzq7Ae r+IXGgprTnIb
Cut4Da/zIsKU3uSE8ahC/Csdv8ZvVhBHViOOEPHviDhCxH/AnzT8sQxxRMef lxHzPcGTTH0Z
V+XfIuo0lnDybkr2m+qGs7NUpfcpz1i3AzbJiVpGLidzGv61Pt5Lk5sNaHl2 4yD7dSXUXxWf
eMXip8ZvIa6Ca3XbPGpf4UMFAvys8X/ch3p+6kUBrju41uE27Fx6+TEqq+C6 t4CG8Xne0NoX
cHsBTePt83jrAvaX9O3h+8CdqMV+6mnmvWo/L0hHfP17ijrQgnu41vLidS8O 00IdgmgtWhIn
aElZfL6tgDaaOjKHjgK6x+n1sXj7HE4UcHJ8l9Ywj1NzCBdwmjIDg+0Ue3v1 axga6qjk4/kb
GFnAo4mOquKXx9WXAlLjHY1yHlM9Ve1NVXO4vAC7p7q9qfoG3AXMzOHdBVwd b2uoncfTPTVN
NY3PzOEDTTUFXB9vqp7Hh+fwsRLOCL1XpNajkxi7iKgbHbgfR3EMx/nfhxN4 BKdwCQ9x4D+M
aYQ5EyO4hiie5e7neMZSnJwposWn8Gmuu/EMPoPPkosOmJR5ntaOYwKfxxcY 1Et4AF/El8jQ
NK8jX8ZXyPU1svoCvso41qkZvRSvF/meSoLTN/C1RXxL4Kz/8F2BeHvjDxfx 4wq0LeKnAu2L
WKzAmL/7S4HBI42/XcTvl3ePFHfbXl6BfYhhA4dzHVOikQ7t4yHuMB4nCQYB J3mYT/uwDqgb
PuErJ0HJY3gDf6FznUyGF/BXaqvA33ytf8c//ASs5IW2+Hd9ab2Af+LfNXX/ A1BLBwjJKtZZ
UgcAAHMQAABQSwMEFAAIAAgAQaQ0OQAAAAAAAAAAAAAAADoAAAB0ZXN0LmNv bmRvYnMubWFw
L2Jpbi9PYnNlcnZhYmxlQ29sdW1uTGFiZWxQcm92aWRlciQxLmNsYXNzpVRr TxNRED2XFpaW
FQqKDxSQUrQPYEFEkSJGCybEBUwwGOOn2+0Ulmx3ye62hM/+IhMUH4k/wB9l nLs0mBItAXez
6dzp3DPn3DszP399+wFgFssaOgRGN8sB+Q1ZdqjkOfWaa8oyOa99r2FXyM/M aogLpPZkQxqO
dHeMzfIeWaGGLoFlz98xyHLs/YAMy/PJqMhQlm23YnOgd4pr1OS+sbYu90u7 jECmHYTkki/Q
Fe7aQWaGSZhtWRQ5dMl27XBZIJ09Jza3LRAveRVKQOCKDg3dScTQpyOBlEAs qwL6TNuljXqt
TP4bBSQwYHqWdLalb6t10xlXBAXG2qfMzDLBPtZWcehUpcCzrHmRAzrdudog N2QZCdzEkIZb
AouXx9FxG3dYSMWuVgXmL8pohbcVkxjBXQ2jAnOX2K5jDGmB3h0KT3hVXtEh H2p/NmdGZVUP
bcfYorCoIXMmxV5VWmQ0bDogPzBaDr2JFYnswT1kNdzn+25B1JFDXkALvee+ Lw8FBrO59+bZ
WmZ945hU5TElsNJ6aa0E1l7IgFqr7S9wue0kDHDjcGEPty0cHQ8wJ9AtLYuC qBHenlfdbdj9
83iilugkZQos/U9R8iSQ1SqLZGSHauwKVC+1XiMLculg9STd/KUICyS3vLpv 0UtbtWG67ZlM
q/RMY9W1HC9gEesU7noVAX3N5TFTcmQQUIAZHgcx/johUik1FXgIdvCXQJK9 PWwt8Fp5kvnC
J+j5Y/R+jGL6lS/6R+2ewABbOtvKexXXIv8grjdRPiDOLzBeOMKNzxhe/47x d/kj6JNfMSFw
jMKGWk19wfQf+BEmBGSZVI6h80ihwIA5DGESaUxFKfMnsM2UynqIeU7azS3+ CI8ZaYjFLOAJ
y4xhMcIuYol/41yPwNOIsIiI8/MbUEsHCCYoaeqpAgAACAYAAFBLAwQUAAgA CABBpDQ5AAAA
AAAAAAAAAAAAQgAAAHRlc3QuY29uZG9icy5tYXAvYmluL09ic2VydmFibGVD b2x1bW5MYWJl
bFByb3ZpZGVyJEVNRkxvb2tVcC5jbGFzc41VXVMcRRQ9zc4wyzIxQIA4MSQQ CdklwAaiiVlI
NEGI6PKhJCgfRmeXZhmYnVlmZjExicZU/HiwfE/KF6uoosoHK1ZZBLSk4osP 8cUfYpX/wHh7
ZsHALsjLTHff0/ecvvf27Sf//LwOoBN3FJQxnBhOudxZ1FMm77XNfNZK6ilu jjj2ojHNnea+
wf6kbc9fzSmQGFpsJxPXc3p6lsfTdjZrW27c1K1M3OPXvfio5whsPscQ5ibP cstzGQ5MJuf0
RT3ADafmeNrrZijvMSzDu8AQisbGGKRee5pHEEKlCgVhhv1Jw+JD+WyKO1eE NoaapJ3WzTHd
McS8sCh5swZxxJJ7PIVgNgsaW6LPCCPthpXpjhUvhXGAgbVFUIeDCuoZqrZD VDwPjUF2c6bh
UURL+Z0s5fgFhrKpjgowNKiQUR7BUTQpaGSo/g89YHk8wx0Vx/AiBTanOy6n NYa6UjwDCo6T
O5EnnjaNnMvjPDtDY9vh8b4g/JVoxgkVUcQoGrzX1F0KYWM0ltxhl4/orsRJ tCtoYzi8G05F
B+IMWoZ7fRdNk3Tl017e0c1+rtOfE9XxElRBNcXznmHG+5KG6xFfJ04r6GJo +l+wipfwMgXH
8Lije7bDUB8tpNIHDRTWyelZnFPwCpVTsVVFAlQgkkXFzFAbjRUXroLzDNEd zl901kr04FUV
r+Eig0IBGdKzfLvjQuJEefWqeB19IicLed10t2W4oCA2IdJ3WcUbGCCt/DIn rReiO+WuSFN3
iVOJqLylIolB0jmru0N+AOhmToQxTDV685SCtxkObld9KW+YdL2E9lEVV3CV ti/qZp4Pz2y7
XhviSx18BO+KS//eDhU9JhATKiYxRaHRczluTTO07+nyFgT6JNdUfCASEfbs wBiGThf7toL0
ljsdSI2AI6NgZuPUfoMb5K6rZ3i/7WR1qrlZGKRoxp8xnCuhqETrKxmCFK6F YTJQJwjN8xui
2RWhGCoDqhHdKeqrmxg5F1hlPw9bHW023yO733SKCh2MUXkpM0HRMLTuvcAY 1EBoIIohMmrn
nTTvN0THPrZrp+4QasnBgGVxx1fDXQWfUEfbdRtDxWaLR6OIIkQsmWiqNCqj Eb0q9K2g2Wnf
AsitjxD50Ter9I3QH5QJCdPYRyM1AOE57PedVaE6cMD+plXxbzpZU7OC2sG2 UFfNIRoMtf6E
w+2hrlUc6UpImvQbmu/jbvu6tIRbmvQYzWtoYUjI0pnyZaQ1eQ2tDGs4RWvh ZXRq4TWcYXiM
noSiKWugx7G9rrxrBZfuo9bfL1b7y5CQlrFPoN9kePD0jwKR9izFvXJWV96+ /t3Tb9sE/VzN
UEL+BSPjmryKdx5hTAgfb5PI+fgK3k/IbevyEo4WI+RNxBbbhxurmiz9itR4 SJNGVzH9UJN+
R6UmrWBuGXLN/MPN4E6gnr4GZWGOAmmiARY9Jzb1nRzOY4HsDubh4gY83KL5 F7iOb2j2gOxL
uIPv8Rl+wF08wT38ic/xF75kZfiKVeNrP1lTQUIKyRKjLDFQ1tkhYsmRiirC LtAohAYmEZtL
iT5LqCgxytT455DHIlXLBL2zHxG7QnxpUmCRtQwf+ye5SdpEoYj6uY1PEfkX UEsHCKmALpO4
BAAATAkAAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAAAAAAOAAAAHRlc3QuY29u ZG9icy5tYXAv
YmluL09ic2VydmFibGVDb2x1bW5MYWJlbFByb3ZpZGVyLmNsYXNzpVXbUhtH ED2zwgjkNQZx
DYSAMWBdgAViwDEXGwuICeIqwFHIbSUNYomkVe2u5HxAfiIvqcqTX20nQDmU XXnKQ74kVanK
JyTp2V2LmwLBqEo7s7PTp0+f7un5/e9f3gAYwq4XEkP7csLkRlFNZHhEzxSy uaia4JkVQy9q
KW54UcHQrxtphSczWt7kyu62muRKUeNPuWEqZUwYZItn8xnV4uv8W4vBH91V i6qSUXNpJWYZ
Wi49znBDtWiaKFh8Uc2bDJNb0eNekrrBlZRqqQktlyILRS+xVLJqXpk/Yk32 hFdpFhKmRc77
bRw1ryZ3BEw2q+dMx7dFbASBmNipWQVLN8iwjuAiO/SdRzXT4jkRwMPLcVk8 jUCwVRNkndOs
KQZPILjJUBHRU9yLOobwJQh6Uc9w59wUdc8uzkV1/ZuNvA9+NMpoQg3pMWF7 96EWLWLpPfIb
uFAagVPIjwc3q8HQJqMaPoabUS3HlwrZBDfWBQeRUT2pZjZVQxPv7uJq4CoZ PFsjwU0vOhnu
vzuoj4LoEsHfZlgLXKnAytGjnFo7GtVuR/TcBFE1yMernWHiKlR88KDRixD5 Pb8uhnwIok/E
3086BC4g6eRckXEdspgNyfCi6jo68KGMuxhhaFBTqTOlzhC5ZN7PnhbH9ZiM a6hkYBr95xm8
Kc3M6yYXFCZkTAoKzQbP6kV+BkJo8kDGfVH5VWluzWfVNJXk3cCxvC0ndnnS Gg+eYGs+tZS0
oeZ3tKSp2FaULS/P8CzPnWpdrj19JgdOZ+sti3+mVHz4GPNePGaoPf1NxidY oNOa4bm0tWP3
Ctq5eGKnAyxkWJaxglXaRQwu9u4uiRYQk7GODYZ6Mnx7bNe4qWeKIoOhQPD/ doZqajFPZHyK
OAntykQnoH6rvN8tGZ/jC5LM4HQhJPkp0m+PUrkLokpNJrlpdg8yPLmodqP/ fUGd2OgUTWq2
SKyp6nxQkfQi4bbk8gCPVJOfAJGRAgXSsq0ZvBw6w73AOxJi8MX0gpHkc5ro qF3nRj0gRKPW
Mp+jAxDJqKbJKRPVpdsAt+hQeeimr4AkThbN/OJI0+gTjZ1GSRx2GsXqDdTQ /pv0NkoW4uc/
RG38EP74ARoO0PwTWl/YNu/bCBI9O1GHRrTbqyDrJnzgYqyQR+G7JlTxGh1x TzjWd4Bbp+1H
yeuYbd/p7EY3emzfNejFHcISM8FdstFvu+jfE0PBcSR0gEDoEME4TcJ7GAjR Y9Az9Qz+cPtw
6GcMvMKwhO88rD385sd//gr17WH0iESXLcYkQfVQrT6gUB6iFdPk+iEURKjr zdjkQo6zErkR
WzBmzxxyzWjBPXxEQTDRhFyaGn0RYfZ4Jp6hkegMtrmkxokUY21iiXj9Qeyn jmg1ESioZVzD
YzTQ2Ek9ohsLNpUmB9ClIpHewi01TKI8Xcofs3dJ7HkJs9Kmu3QMQyqFI+ER BSswZjDrYuy5
Cq8SxdHfsCCGfcz9gGmb82tEF4XMjX3t4r19OPwKSxJiQuk+iujPl2jdx9qv 8JPim/Ti2H/2
/BglR/01KqEYqb5O7W0DAzSOUXeZQRzL1DqO1F8t0V116baS+tSHbLQ2R/3a KnyJr9wQel31
K0PhfXz94pQUrFS2ErbtZxo79hGR6NZ0fn7apcH3L1BLBwhKxsUQ0gQAADEL AABQSwMEFAAI
AAgAQaQ0OQAAAAAAAAAAAAAAACQAAAB0ZXN0LmNvbmRvYnMubWFwL2Jpbi9j b25kbWFwL0Eu
Y2xhc3N1UE1Lw1AQnK1pYz+0PehBsNfSXvro2VMQPRUUCt5fkzVNSd4LL68F /1oP/QH+KOkm
Fjyoh91ZmNmBmc+vwxHAAqMQLUI3tiYpdKmiEAFhtNV7rXJtUvWy3nLsQ3QI Y+tSxXGelRUr
Lt7lto7V07eEEKTsI8LNdLb8+V95l5n0QdiqYW+nv8nZG+FOJ8mrsyU7//G4 EZKXWeXZsCNM
zj9r1qZSf6sak3vHhd3zfz69ld25mJ+znAmdaF6bSi7ChUxb6ggke4hL1B10 0Wuwj0GDVzWK
7lp2C8MTUEsHCD6kNrPZAAAAQQEAAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAA AAAAJAAAAHRl
c3QuY29uZG9icy5tYXAvYmluL2NvbmRtYXAvQi5jbGFzc3VQTU/CUBCcxULl Q+GgBxO5Erjw
wtlbjZ5INCHx/mjXUtK+17w+SPxrHPgB/ijDtpJ4UA+7s8nMTjLz+XU4Alhg FKJF6MbWJIUu
VRQiIIy2eq9Vrk2qXtZbjn2IDmFsXao4zrOyYsXFu9zWsXr6lhCClH1EuJnO lj//K+8ykz4I
WzXs7fQ3OXsj3OkkeXW2ZOc/HjdC8jKrPBt2hMn5Z83aVOpvVWNy77iwe/7P p7eyOxfzc5Yz
oRPNa1PJRbiQaUsdgWQPcYm6gy56DfYxaPCqRtFdy25heAJQSwcIYSDdAdkA AABBAQAAUEsD
BBQACAAIAEGkNDkAAAAAAAAAAAAAAAAxAAAAdGVzdC5jb25kb2JzLm1hcC9i aW4vY29uZG1h
cC9Db25kbWFwRmFjdG9yeS5jbGFzc3VSXUsCQRQ9Y+rqpvmVZvZhj0rQ0nMR qCgEYoHi+zhO
srYfMq1BPyt6iR76Af2o6M66UYYtzJyZc+85e+/e/fh8ewdwjhMDMYaK8L2p yxdWZ4U9LgJf
PRmIM+Tn/JFbDvdm1s1kLkVgIMlw7KuZJYVjLx6kJd07OvtKWt1IyZCW14Ph qDXodBmq/c3+
FwypS/Lw7OCKYavRHDPEO/5UmsgiZ2CHof6ttN2F80d+TVQGeRRIpT0Yao3m f69Kg6GUgYEU
Q65ve3KwdCdSjfjEkQzFvi+4M+bK1veIzAkleSDJKOAkUAzldf8VTV0Yq8wW Q/ZXRusn0l6P
tClSmMkgqvGWi3s+kxvrj2IkMIf+UgnZs3VtpfX2zvSQaCz0FWklaO3rVmnE CdrTMInZptsp
oX6MV2ReUHymYwy7tJuEQA1JlFAOWT37CvZCrJKdxhoOQjzEEeXQXxBm1r8A UEsHCOU5qIhb
AQAATgIAAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAAAAAAOgAAAHRlc3QuY29u ZG9icy5tYXAv
YmluL2NvbmRtYXAvQ29uZG1hcFBhY2thZ2UkTGl0ZXJhbHMuY2xhc3N9k+1S 01AQht8D2FI4
CPIlxQ8ooIIgFVFR+dA0BO1MCJ02w4y/Mmk41GCadNLgDLfg3ai/9IcX4EUx 7jktoDO0nUn2
3e7m6fbdnD/nv34DWMNeGj0MM14UHtXdRl5vxZLrfXZrYsH0ExG7QTONPoaR E/eLmw/csJY/
qJ4IL2HI6AeWrRUto8xw34ziWl54gd9oiryoH5OOYpE39MBtNjcZxi6bHccw jX3DsisMc50e
K4tjEYvQE/Qo0xj6NMfRuvRrSRL71dNE9Reov+A4FLJGqXxQMsr2R0f/oFnv DccsVmxDjZzr
xNp1E9c+a0hU/xaVQz/ZYehdXDokrh4diQzGMZnGBMPk9dZx3MYUGSSKVsXW LN1gmDKvb90c
JNg0xx3cZeA1kVA5cf1QxAyzi0vdbc2AnOe4gZSkzHLkMMcw8S/FMQJRF2HS ZFjojLuyWyIX
ONLol8iHHI/kYH2E1GRpiSPT+rVljhU8YUjJktxNF/zVdiQjzzGAQclY43h2 gS/I0nMO3sK/
5Ni4wBccVXzNMdR6bpNjC9sM01Q0SnHUEHFypn+il1OYfjMRyr35zvNcblhi 33LcxDDDsEl+
Waf1qohttxoIhlEz8tzg0I19mbe/HKhEp7En9nyZjP2/zFV5SGiNxZAmUCsS 5Hv/xUFK0buJ
Xjp5aWTl0khlpdMqZto5WaMib+dD7ZxmpEg0jOAWxVHKvlKUH+s7xn4iy/AD 95SckXJeyQdS
Lir5WMpVJZ9Kua7kCylfKflGyp1vROzBO7rPydlYGoNsGJMsixzLYYUtY4Ot o8C2sY9zaKpb
XgV117FLcQDyv47DSGX+AlBLBwifC5cxbwIAAG4EAABQSwMEFAAIAAgAQaQ0 OQAAAAAAAAAA
AAAAADEAAAB0ZXN0LmNvbmRvYnMubWFwL2Jpbi9jb25kbWFwL0NvbmRtYXBQ YWNrYWdlLmNs
YXNzfVRrU9NAFL0rpWlrkZc8igooqCDa+H4AomncamZK2mkDo58y27CUYJp0 kq0MP8vxi+MH
f4A/yvFuKFAy1Mwk956759zNnt3kz99fvwHgCWgKXCEw7QT+Xpt1VP0k1pjz lbW4AikCY4fs
G1M95rfUavOQO0KBNIH5IGyp3PHcTsRV3t7HPAi5SntKAsPc1LYpgYnKub4h QtdvbRAYwXki
wXyxy7wuz8BVAkrvFTDjZsPeqRsZuEZg7kCIzrqqHh0dFZs8ElHgdYUb+EUm COQks1anZeMz
gSw3zIalmTpOOlu5fEE4dVavmpZmmLROgBhDaAIQmDwr2jat0G1qWg0CM+fV MtWsnTq19eqO
aUkRQbVGIKXZNoZR7SIDB0uShdamSrZdQkYpySjQWr1ao3Xri61/0syP1K4Y DYvibFI5RCCz
ifb6rtgiMLSyuout9GCP5+Au3FfgHoGF0zW67Y6XWKiBpTyswCqqZA80cmV1 kClZdGAtD2Mw
ju9ZcX1udttNHlqs6XG5gYHDvF0WuhL3ivkWF9hFMGSHBBax+YADoXssitD3 qX6FTT3e5r6I
CCwPltb5Pg+578htS6EcjU7LIB3/j0wTeMyaXXEqK53ISnIb5jChtTDo8FAc 6wd4KHnFjQSP
V7E0uOcHJph13JEtx08WIg0sM0cE4fGl5vbGUJBrBN3Q4WVXGjd50fui/DjQ TsPHN4it4pEC
7/o29yJ/ueIKHjIPjcucpvg14gnBexiuQQEUyGCelacPcojzfXgE8WhiHLcd 8wJMwORZ/Tri
qQSe7sMziGcTuJDgzyXGb/Thm4hvJfjzCf5CH17EmIHbcAcrS1hZwygv5Scs /4AH32PSQ3zm
MAK8hTS2exRX5S+sCGocH+MPT8anPfwMnsfxRQ+/7OFX8DqOb2A97rERPzex r5yBwBbe79PZ
f1BLBwjFXsqyvAIAAEUFAABQSwMEFAAIAAgAQaQ0OQAAAAAAAAAAAAAAACwA AAB0ZXN0LmNv
bmRvYnMubWFwL2Jpbi9jb25kbWFwL0NvbnRhaW5lci5jbGFzc42QTUoDQRCF X02Mk5mo6AGy
FJKNTdYRNzKzCmSRE7SdcujQP6GnJ4dz4QE8VLBUENSNi4JX8N6jvno7vbwC WOKyREG4MTHs
vD6oxxiytoFTiTPC9V4ftXI6dGrztGeTS5wTZjF1io2zh54V+2fRMbFqviyE ace5cew55J5w
O1+sfwdM9D4GNWTrVLO2fV4Rqq3tgs5DYkL7n8z9H8uPO1YPUlpv45AMt9ZJ 69U33N0Hl5AQ
RjJjeQQJbYmJbJVsBWpR00918Q5QSwcIxou448cAAAArAQAAUEsDBBQACAAI AEGkNDkAAAAA
AAAAAAAAAAAtAAAAdGVzdC5jb25kb2JzLm1hcC9iaW4vY29uZG1hcC9pbXBs L0FJbXBsLmNs
YXNzjVVtUxNXGD1LAglxfSlCBEEFpDYJKdHWWjX0BRBtbEQqCJVadQk3uJjs hs0GpbXa2reZ
TjvtV6ad9qMdxw9qa2i10+mndqY/qtNzN0sIIajMsPfu3ec557nnecm//z36 E8ABfOlDnYKm
lGnMZLVcTM/mMrGBBJ8+eBXsM63ZmEhl9FxexEQ2zb1piZLV8OnpOZGyS7YN ChpXMAYU+PKF
XM60bAXdyTltQYtNC83Ix0YtMycse3HosmbMirGSTVxBYODi8LHh4wNnk+OM peSRoUlszLZ0
Y5YWiqbA389ADN1+XYEnFJ5Q4B0yZ0QjFGxT0YiAgq1J3RAjhey0sMa16YyQ YGZKy0xoli7f
3cOGfgcmAA9aVGzHZh92KOh8WqABBNEm7XcqaAlVRFkSIh6ekLF0qPDBL3e7 VWySUXnty3pe
QXNyvci8mSrGbM3WU0MZLU+rzlA4WVv0Ycci3oge7PPheQV7VvCGSuuolrqi zYqepG4LS8vk
VbyAEKVjPnY/GZMxzgqbds1kr6G+N+98XXNp92N4wo9NUpmYiv04QMXTuiXW 6qfgSA3P9QLW
kjRAIV9WcRCvkF+MmLae1lPUyzTOiPkCqWacapjy4VUF0SeVa6Wv1D6AQzgi 03lUwWhoA4ES
BrU0tIxb7PFE4tnD7lfxGlisvlLYiwpi62lSZjZrGjHDsYhVxhh3StwQV6m8 18zMcGnTZmbW
SpvU87YwhMVWDW3caStWTmBBHFMxgEE2VKbsvfcZnFnblsiaC6L2d4mcUHFC InvFCcHm3xFK
TE2F1+sj1TmlIoyI7MHTKk7ibQ6QtNDsgiUSx1i0CepmibyZWWD5KFMMVuZj fDEnJPqYRA+G
aiQjPOHDu5wI1eUmKadU9CIqKc+rOAvK66e8E1qmINaOHReLk0KcNfKSyxtK SO08mFZxEZfk
l0R+bOXLVACTSKuYxWX5Zb7A7ttgRkxJkDkVKbBw/ba5Gl1WhSGr3E9kKnxt UVrmVFxBxAem
KFh9pcFCOi1ln4ctyzjqx4KC+s6QdrRTHl5TsYgPGI+WywmDbNFa7bvuqIQa lwjXJcJHCtpD
Q0+0y5GEuSpkKEfrRoac8mNmwUqJ47qcwQFn/vVJY87AhMECcmaRyPvwOS9b e7ZRnZXphi5q
5uF/PZ91cuby96xD/g5w9crJy1XlqYrNtNrCtzBX+Vev/IKt97mpw3N8BrgC fXTaiybnVAJs
L7uN8E06tkaW0Rx5jOA5blofoj3yAFsfYtcqUhMtgTf57ME2HMYO9lmTE4bj jz3odLC70O1i
93GV37wPsPdeGafBOTtZ4et1fRXZNK5vzPWtj/yKXdXOYxXO9WVnlr/rfIvK eLjul86nIr28
B3ftTS9Ge4voixTx0hKCvOyhcxGvJyqNlnG4iPjqZXeSCThP9Pcp4QW0sDE6 cIlhaQ53Zwnf
5Za7NxBw8tVLiaToihxDbjwDfJfCN8ooGMJQdX50BjznAAdLhmXgRgzjuKPF iQ3h3qqGswiX
fwocp5ILN88EyNR2td9xbFqx+redYiXvRdo7qNDIahq2ONe/jmbcQBs+dqgi JZAyVRdG8Y6T
oi6cYcrqnN04d7KwOaFceovvEq3Hpe9YQx/9C5NFnLsfaY8u473ViwYpNfAV I/iaHt9gF75l
hX9XkZyeciQ95Uh6mM4LTnI451z+tKtmt8vfvoafXVCiX4ZWzb5E9u9p/wMj +JF3+6lC8u4y
e7fLrsix6HLecDkHXc54JScp/0GTrMq/4fPeRpvnNlp4KE+KEEvw8cDrvStj 0u9W5eRnxnQH
/bhbEctgOZbBcixXyp123RkxwEGmOrMEP/vfvPcY83IQmMvIJ3ubCkVcnewt 8XOzLVzEh5Ms
vBurFVFqmCKb8jcW0O9kfIQQHrNh/qiI5KAbSSsVu8m6UXj6iYNxC5865asw R5/hi4bG/wFQ
SwcI2dBP564FAADFCwAAUEsDBBQACAAIAEGkNDkAAAAAAAAAAAAAAAAtAAAA dGVzdC5jb25k
b2JzLm1hcC9iaW4vY29uZG1hcC9pbXBsL0JJbXBsLmNsYXNzjVVtcxNVGD3b ps0Li2BpQ0sK
tKViksYGFBFIfaGlYDCUSksrFYFtelO2JLvpZlOoIiq+zTg6+rWjox9xGD4A SqrgOH7SGX+U
47mbbZK2KdCZ7r1793nOee55XvLvfw//BLAfX3rRoKAlbRozOS0f13P5bHww yacXHgV7TWs2
LtJZPV8QcZHLcG9aomw1fHp6TqTtsm2zAv8KxqACb6GYz5uWraAnNactaPFp oRmF+Khl5oVl
Lw5d1oxZMVa2SSgIDF4cPjZ8/OjZ1DhjKXtkaRIfsy3dmKWFMq3AN8BADN1+ TUFjODKhwDNk
zgg/FGxV4UdAwZaUboiRYm5aWOPadFZIMDOtZSc0S5fv7mHzgAMTQCPaVGzD Zi+2K+h6UqAB
BNEh7XcoaAvXRFkWIhGZkLF0qvDCJ3e7VGySUXnsy3pBQWtqvci8mSrGbM3W 00NZrUCrrnAk
VV/0Ycci4Ucv9nrxnILdK3hD5XVUS1/RZkVvSreFpWULKp5HmNIxH7sej8kY Z4VNu1ay11Hf
U3C+rrq0+zEy4cMmqUxcxT7sp+IZ3RKr9VNwuI7negHrSRqgkC+pOICXyS9G TFvP6GnqZRpn
xHyRVDNONUx58YqC2OPKtdZXah/AQRyW6TyiYDS8gUBJg1oaWtYt9kQy+fRh D6h4FSxWbzns
RQXx9TRpM5czjbjhWMRrY0w4JW6Iq1TeY2ZnuHRoMzOrpU3pBVsYwmKrhjfu tBUrJ7Agjqk4
CsL5shXvPU/hzNq2RM5cEPW/S+SkihMS2SNOCDb/9nByaiqyXh+pzikVEURl D55WcRJvcYBk
hGYXLZE8xqJNUjdLFMzsAstHmWKwMh/ji3kh0cckejBcJxmRCS/e4URYW26S ckpFH2KS8ryK
s6C8Pso7oWWLYvXYcbE4KcRZoyC5POGk1K4R0you4pL8kiyMrXyZCmASGRWz uCy/zBfZfRvM
iCkJMqciDRauzzar0eVUGLLKfUSmwtcWpWVexRVEvWCKgmuvNFjMZKTs87Bl Gcd8WFDQ1BWe
PtIlD6+pWMT7jEfL54VBtli99l13VEZNSITrEuFDBaHw0GPt8iRhropZytG+ kSGn/JhZtNLi
uC5ncMCZf/3SmDMwabCAnFkkCl58zsvWn21UZ2W6oZuaNfK/ic8GOXP5e9Yp fwe4euTk5ary
VMVmWj3DtwhX+dek/IIt97hpwLN8BrgC/XTagxbnVAJsq7iN8E06tkeX0Rp9 hOA5btofIBS9
jy0PsLOK1EJL4A0+e7EVh7CdfdbihOH4Yze6HOxu9LjY/VzlN8997LlbwWl2 zk7W+HpcX0U2
jesbd32bor9i51rnsRrnpoozy991vkllGrnuk86non28B3ehlhdifSX0R0t4 cQlBXvbguain
MSaNlnGohET1sjvIBJwn+nuU8ALa2BiduMSwNIe7q4zvcsvd6wg4+eqjRFJ0 RY4hN56jfJfC
+2UUDGFobX50BjznAAfLhhVgP4Zx3NHixIZwb66FswhXeAIcp5ILN88EyNR2 h247Nu2o/m2j
WKm70VAnFRqppuEZ5/rX0Yob6MDHDlW0DFKh6sYo3nZS1I0zTFmDsxvnThY2 J5RLb/FdovW6
9J2r6GN/YbKEc/eiodgy3q1eNEipga8Ywdf0+AY78S0r/Lua5PRWIumtRNLL dF5wksM55/Jn
XDV7XP7QKn52QZl+Gdpa9iWyf0/7HxjBj7zbTzWS91TYe1x2RY5Fl/OGyzno ciZqOUn5D1pk
Vf4Nr+cWOhpvoY2H8qQEsQQvDzyeOzIm/c6anPzMmG5jAHdqYhmsxDJYieVK pdOuOyMGOMBU
Z5fgY/+bdx9hXg4CcxmFVF9LsYSrk31lfm62Rkr4YJKFd6NaEeWGKbEpf2MB /U7GhwjjERvm
j5pIDriRtFOxj1g3Ck8/cTBu4lOnfBXm6DN80ez/H1BLBwiT60b6rQUAAMUL AABQSwMEFAAI
AAgAQaQ0OQAAAAAAAAAAAAAAADoAAAB0ZXN0LmNvbmRvYnMubWFwL2Jpbi9j b25kbWFwL2lt
cGwvQ29uZG1hcEZhY3RvcnlJbXBsLmNsYXNzpVZbdxNVFP5OWzpJOi1QaIFS ISDQGzQKCEpQ
SNoUIrGUtlbqDafpIR2YzMTJpKWKF/CCingF77y7fKo8tAu7lvLkgz/K5T5n ppM0aVrRrDWT
OTN7f/vb13P++vu33wE8jrsKahh2pi1zMqvlIno2Z0T63MWAlnYsezZJrxTU MXRYdibC04ae
y/MIz16kZ8vmrkpimXA9Q+sS4nIwhjrd1B2Gts6u1MoiUZLpsyZ5EA1oVKBW NZwY0tKXtQzf
M8wzet6xZ1U0YT1DIDk4Mhob7EswdKX+pWo0gI1EaspxcscikZmZmd4Jnnfy llFwdMvs1ZwG
YrNJxWa0MDRkuJPwHTrcmbqkTWsRQzMzkRHH1s1MtKrdJR+D2IJtCrYydK4s mTMKGd2MJMRi
SD4L79oYuqtAVypEQ2SkXcUj2MFQa1gZhpZSrmcnLvG0E+0aC4EhrGIXdjPU Hxf5eYYUOrvG
FOxh2FTUSFxJ85wICMP6lG7ywUJ2gtuj2oTBGZpTVlozxjRbF2vv5UZnipdX wNbqiQ/yooWW
1AqGyadahKlCnCk9z7ArtUbhEmZ92uaaQ1xOdFbLSp+h5fPVk+YFqoHa5ZCC gwztq+GoOIwn
KEBUJHKtX9S5neyXEU2KUB9V8SSeIgmXGJF2NAqmLdKzrCnc11GhE1VxHE8z KK5OjKGxRDYm
ZU6oOImYLxNfLhOPKuhj2F0MatIweEYzYnamkOWm48dYAXXOlvKajhd0Y5Lb AZyiBhid4uG0
cC7cEUI/kqJ4ni0rr6VWGBNxS6l4DoPEjaIyqGUpG5uJW4WwABtScQ7DlDct l+PmJMOBFRus
Cj9q5FGG7R1hPR82LSeshac1Q5902cpUCBtjKl4QdAKO5WqHEEeSbHKZMoYd q5cKwwY3yAO2
lXURGE5Vra9+zdFGZ3M8urojfp29KursAo3lNfBE1jUVE0jTkHQJJYZsK8dt Z7ZviiB5iqYb
pyIq5Xn+f/Cc4JqZj6xsg0JPeW0StTFJQA4BhTuEMynR2EvYomnXMs+giimk i3FiFORsqSAk
+scyp4nGqPXfMrA0/1YqQwaatxYMhn2elSqBLRpv1M28o5lpvgJnz5QCKq22 8pHltrmYViHY
YrgF08WR0F4x4YrihHeF7CwTiLk4MwKHadRmqcrPpPdWuV7c1bsq9SYq9ORn OXyvq3gJLyt4
nxK5ZkkIhQ9VXBaB3CgGoovp7b4rngK8bzIHn6i4iU+9DddX2t251rZODn5W eQTxAUIEV1z0
85zN09Q6NGq2DRdMR8/yMT2v0/4VM2mEaGImUt5aS/JZ1KGd/BZuq7iDb0SV F48eFbvcEjcy
OWIV7DQf0MUOuaVy0+oVhqgHkiaFUA4cnlfwI02l1d2mebZ0nqF5TBsOXevo lKciCAUBWgVp
5aCGnoA99xBq3nAfzTV4gHVnuv9EY/fcmXto7Z7H9kWw8QXsnJOSm+jY8yhp 7aXnNtQLXTqL
7EUz9tGXLrSgG+3YTyugleSaSKYDnbRqIbtd9BWEQ8cLj8Eh+he467oX0PMr PbjQIfoHjqAO
RyWU6goR8AEJ0IuIB3CH3grZcz338RjDL/RIZtxfjSQJ7BQ0yZUjc3Q7Jm7P zC0iPr6I/vHm
gQWcJt0zDPM42zxCt3k8v4Dzf/hkWmXkTiKMGK3j5EMfmU/4PpJxj5h4GseL 0ifqDI/iDdKv
pf8YmXnFo7iNrlrvau7u2T+P14qUJl1KF6tTapKKQ9iKYfJuVFIJu0Z8KjFk MCXjFoOOSzLV
1H0PRSr78KQuECmNSKXXJJXD65IUnYA8UnFai3iGFmFTzTmpnrmykshS7Zol kQ95yAFaFTAt
I0+no0q8GcKbrcSbIc0rVfDewJsSj05SlXhXCe/tSrxrpHm9Ct47eFfi0R7t 4Z2m6Ij4hCjY
C7j2AO8V8epllG6WRDHkRzHkRzHkp9byU5vwUBWJ+kE55O0SSMWHVHxIxU/M DXzkQR702jRA
vfPxA9wqx7xb0qUBDzOIz0m/Fl9I/C892a/kFzE2mHxfdw9fl6P9LNFq5PWt vH+H76WzNP/x
A36qD/4DUEsHCFzo2ywJBgAAtQ4AAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAA AAAAOgAAAHRl
c3QuY29uZG9icy5tYXAvYmluL2NvbmRtYXAvaW1wbC9Db25kbWFwUGFja2Fn ZUltcGwuY2xh
c3OtV3t0FFcZ/93sJrtJLpBMKC95NJCGzbRmbQWtJNQmS9BtQoiBEhu1OLu5 SQb25cwEGlBb
+9JWq9VqW6yKWrX4BlpCQxWp+Cy+sWp79Og5+p//queo53j87jx2h83sbnwk Z2fu43v8vue9
88K/zp0HcD1ejqCOYUM6n5vIaoW4ni1k4glnMqKlD2pTIklLEYQZNueNqbhI Z/SCKeIiO0nj
vCEcloEriBsYVngSrxTGsIw2LE3PCWMgkdFMk2H9ULBgZ7+HIaJ5pJGUN7pa jBj5gjCs2cS0
lpsSQ7ppCSl0h2Zpe2cLpKm9klyPhERHdTOZ0y0xwcDGGRp1M2EIzZ4vcbZ0 LaMfkfNoL0mi
hZsYQrGufQzhRH5CNILhKo4lWEqmDZFZwzPZlDD2aqkMQVCG8mkts08zdDl3 Fxt6bTFRrGFY
M21ZhW3x+OHDh7tTwrTMfGbG0vO5bs1qxFqsj2DdQl/u1NJW3pjl2ICrCbNI Du/Z2zecGGBY
NRRM2tOEEDZyrMImhq2xoQPaIS2eIb/F91iGnpvqqeQqj79rnzT0Go4IonK0 maPRGXVxNDmj
azmaweXolRzLsFSO4hwt0jVha1o3ZUhqJBqFJCy9Q56JdZUb49L1NGIrXhvB ayqmpJeNHaNi
ivJCuupGvI5CWPJUVyWLy1l7mklbD0cvtjM0TwlroJjKWwIcWUsuRYLh9TIS ihz1cfRDoRRK
22nnEpG9lMyWKSl2cAxIitV6MRkDqN7A8UZJ1TBpCHGEsLVa06K89DihT3jV RyUUqwjWq7yr
/Bz7BzIiKxUydFRmHRWTwhC5tCDH7cabIhhhWFtNDcco9lCSS9eSE2fS1oyh ZXaSO2YMQbqu
CdCVzmez+VycSoVajyx9UnYrxiKgsmyvSczxZtxGVUwaycRYsssXxt2pAyJt 9UTwFnJQLRMp
WUlGH7ldvvb3VXVMn0UZkpqxBAl/e2XhRTJHeL8jvH8/DdbY2RfY9hg2Vdbs 63etTkB9rSGw
0kptg2GaQ8cBhjap3d1I5kxLsx2wsbJav5AMRxY5SkEnz70u3i6dXzUHJXOB 4x0gE1tcZp//
N8aqsye79kkJFPIZv4Sik+XmYY47MCtPJmezdIJ0VIFXdGoUR+lgch0o5b2L 4924k9ZMYQ1r
WSFzLKBR2MDew3G3pG2WtOaIISb1O+T6vRz3yfWovX7raDKC91L0fGFyajKK B+gEKE4l6/s5
PoCHGJpkw/AcPVHDTz58CxZcwOPj44uI1Yc4hrBLtv4Pc3wEj1DIbZpiE+qo JMNHRdX8MTwW
waMU4NrUHI9jkOyV+emUbxQfJ9cJt11JWJ/g+CQ+xbDUdoovgS5VdEypkVW1 Wp/UhVGRxCdk
4Zm7YCWZXBCHce9vEQ03gk9TMng50hfFZ+lW0yfN/xzH23C79OoXOJ7ChOst R20UXyQ6TdJ9
meMr+KrnJl8rOlHRTaW2thg3/W9OWERvjeLrdFZqExPBfVIaeYrjNJ6mCx5R DewmIk3euBiO
1qqR/8a+ZLIK7KJyu3TOcKQxEcVZyt2MD+88xzk85+Id0QxqKZbs+HdWxFuS +//HXARArv4m
He2GyOYPVbiMR/AtX0L2R/E8JVq/tOkiRwq3R/FdWkhF8H06CmwYKaHlzHiw tCh+yLCywgEo
hV7i+BF+LG/uMntLbVyv6KhiE19U/6t9FkgUP+X4GX5ONeQcJ6PCzM8YstVs /w+ui4bLFffY
6eyuyxeoH9aOORX3Hptnpy4/N1YuvGV3SxzUmZM58pxtrzAj+A19ilW/vFJi etditJOpIfrV
0ydBnfwsoM/JOvlRYL+b3Dd9ENC7SX4f2fNl7rvFfi8hqlYoJKWNZl30ln/1 oaex/JRNtsJm
rqPnKMJYh5X2qvytKrLlbBhATFVWn8YrzqJdZWfQIR+d8hGTD1UNncF18tFd krzRBnkLgd5E
cFSSdj3JvZH0XKK9P2MzBm2N3JGPV9E+iPoGvNrV/TBJknvDp7H8GFpPY4uy eh7b6nAB9SdL
s+fBjqGlNH8KTc+B3XYWN10AGwyTueocbqZfgn471ZNFhOvJscBBLCcre1HA zTCxA4forj9L
x+zRIrpe8kbSRsfInkEXXZzeEl29+gw6SkIb7MV7fabVu6YxeXa7zNtd09ok 8zyGKdrz2Cst
Gy8X9ZBPVFtR1FsDcXSWMz8aiINOqwAcnVfg2F8u6nggDi0QR6yc+UQgjlQg jlh1HKcCcVBv
D8ChljOfC8QhMOky3+AyRylVpi5gbTn/RR9/tMjfXyyXJ9xy2UXKrzuG8Ck1 LCtDDc3hoCwb
GW4a51U1bK90ypVOWjFVtd5eicmVmLPSMIdDVF2lmlKpXoEXSfWvqLxforWX sQG/per5HUH5
PbbhD0jgj5Rof/IB3VUEOuABZZdpRLXOBklbtwe0W1WOzOGd9vMuKvg53GMj Vu5X3hcKEeIH
x1RyzAdp7eF5fJRcpRxjoTrlftp0/ufwxJhtknJc+YyP5UmH5fMMygkWCivH JYfD8CWHgSlf
C4XDND85pF5LHM8oc878WW//G9X2Y8p55YJP4bdLCr8jFZ4vVxiroTBWQ6Gq fE/5QZji9MKY
7amfjJXCNG4//0ph+huF6e/k8H9gNf6JDSyMOKvHKIsgxaK4hzXRHb4ZT7Il dGVaiousBZdZ
K/7C2liYLaf/FayDrWRb2BqWYOvYLWy9HdYVTujcsD6CZ/ELXKbA1uGXNoYX KT1ka2fYil/j
pYbGfwNQSwcIF+yn2wcIAACRFAAAUEsDBBQACAAIAEGkNDkAAAAAAAAAAAAA AAA1AAAAdGVz
dC5jb25kb2JzLm1hcC9iaW4vY29uZG1hcC9pbXBsL0NvbnRhaW5lckltcGwu Y2xhc3ONVW1T
G1UYPTcsbBPWVmhNC4HSCK3JFkkxtr6AVAyhrk2hEkin+bYkl7B0sxuzGzr4 1en4H/wJDh9a
R82gM46fdMYf5fjcu0tIQyjuzOa+5LnnnHue50n++fe3PwDMo6QiwjBecZ1q 3WxkrHrDzuRc
xzcthzcNWqlQGG65zVqGV2yr4fEMr+/Q3G3yIDq/vr3HK34QO8QwcozVgWG4 wG1e547vMUwX
erEqbr3uOpmWbxFYwfL8BYZo0ao5pt9qcoaV808sngoJBIbaFpYIcmjRcix/ iWEglS4xKDm3
ymMYwCUNw9AYLhVI61qrvs2bm+a2TcSjBbdi2iWzaYl1uKn4uxZdY6JwtmVE pvGib/pWJWeb
HkXfSKXPUigjFqK4ijEV1ximuuwT42Oz8sys8ZmC5fOmaXsaxpEgg3Lra5vL xlp+g+H6m7EZ
hmvcz3cycLOPmH45WP0/cec7HwXdX4OKCyreZbjTPz5ADA5tcM+19y2nJhlU zDBMvpElhiRu
iTS+x7CYKuyZ+2bGNp1aJjDgDImGQ446pn0s1ZBlwR9wn+FqyiiX011IYUyM LnNbwwQmRem8
ryGFNCVjh8taNVYYmMGgNuUNqFpYmYpfsG0eNETx8KJAj6eM09Dp0jDu4WMV HzEkz/Vdwyei
aAcrNjebKihdVySijMi5tk2QlusIyM80LOE+NYBZrS7bNsNYaFFP7EK6LC61 rCGLD0m2w5+X
TLslG+GUWoLjW44nbqOkyDlx8oGGFeTFN4ZXPP6mLCQ81FDAIzLG8vL1hn8g m1CyrWv4EmRZ
rOi2mhW+asnGe62d5gQ5tZTh0IbMKPdUbJKN/VuFpB83C9UFUdE7SK8iapDG KP3wRRCjlSI6
n3beop0sjYzGQb2Ni69kyNv0GaMRuEuh9zBCMy0Iwigu06jgCt4JAeZCAOUn xF92zg/Jvftd
Z5XwLBNVRFGBnOsS41EYn9B/xtTfGNV/R/Lp6LQ+0MbNXzAldk+gL9LNQO6p MBDHwy6KRIeC
yjOU9w0RKzQmEz9CPNdw8lzWf4X+Uk9MTLYx20uwRXd8gjE8lQR6ABISiNkc MpI0iTv0fxKR
sw9oJmynQgrpX9BaoGVD+tu99Ee4yyAms3/i0yMsRvDklZ6YbePzk2SMkz1A lQTtkHU1AtnF
LPaI7pkUdyOg6IjLdsRl8QVyhMJEhYaSdmkt5M6Ekib7SiIRbayeaIhT8gGf NOzTieeUuANM
41vJHw/wOvwzIT8TNR6y1kPW+ZBVf42VEvwXRsRwhK8YfsCgcjhwKCSsHfbk 5TuS8IIs+L6L
er5DPR9SR/BYnvsaG7Ka6acNRWwNRf8DUEsHCBWlPc3oAwAAAggAAFBLAwQU AAgACABBpDQ5
AAAAAAAAAAAAAAAAPwAAAHRlc3QuY29uZG9icy5tYXAvYmluL2NvbmRtYXAv dXRpbC9Db25k
bWFwQWRhcHRlckZhY3RvcnkkMS5jbGFzc5VUfU/TQBj/HYwNtgMm4FQUUZiw DaVM8HUT3RaI
JPMlgRD/PbpjlHQtaTsN30oTxcQ//AB+KONzXTPY7NhYs/buuef3cnfP3Z+/ v34DyKMUwxBD
WretWkOcaE3PMLVKq1OqiRNPOttC92znNJ2PIcIwG5a5+8Xw9COGqHdkuOk1 4qv2JyxQftGw
DG+TYTkzCCC7zxCp2DU5BoYExwiicQxjnCOGCYbhjEqYrBqWfN9sHEhnTxyY kmGqauvC3BeO
ofpBMKKsMiwNoJvOk9VxXbiShj1B9A5D8dxxO1rIVm2nrkndNE5cqcnGoabb jYZtaZbtGYen
WsBbiCOFmzHcYFjoL89xC7MMKd2Rwju3ECQxZDODytKC2wfHUvcYpkPcM4yo SZYYNs4nV7rS
pO5x3FdmJ1pmS22TiQuEgU65Q6d8JZ0ljuULOuUQnTLpJGryUDRNr0JyDG8z /ylI3XaktvXB
X5UrOXjI8Ug5mGk5CCjaPub7SDGs93dzLD4LzRRWXQtCcar7PEcWOVLo3KPQ 3A2OOdztyC33
yn3GsYh0x1G8WNihmJcc05hhiO/aTUeX24Y6WbOhVbyqCBjGdo26JbymQ4lb oWevdZcUB9yK
TVrJyS1LN23XsOrvpHdk1xj4jkWuK6ZwXelijZwO02XHkkl1ZVBrjP4xjFJc tZ5jiB4gnlv5
Qa+f4N+oN4RJFfNHqGKxgyS1OLVV9Bqm/DhNP2Ap0lfljua+I36G61/bHFEf U/XxqVZOgFet
27hD40xtVDjTfDfTx55MCz4TbWM404Nupr2eTBmfiQotnGmlm+lTT6ZVWvcS MWkB01Kw2tHc
yhnWunmYz0PjhJnD4zDM+mWYRTwJwzy9DDNNFRCCedETgwgKfquIV/53E6/9 aIreb/z6YD6C
fv8AUEsHCJQcHY2oAgAAaQcAAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAAAAAA PQAAAHRlc3Qu
Y29uZG9icy5tYXAvYmluL2NvbmRtYXAvdXRpbC9Db25kbWFwQWRhcHRlckZh Y3RvcnkuY2xh
c3ONVV1PE0EUPVNKl7aLrQgF+VDEIv0AVkRUKKBQS2zSoAZCoj4ty1AW291m u9Xw7C/w0Qdf
ffJB8StoYvDJxB9lvLtdVqALNJvszNyZe86Zs3dm//z9/hPABJYE+BiGFF3b KMsVqWaqJSlb
HyxsyBWTG0uyYurGjgA/w5RuFCWulNRKlUu8vCkpermsa5Kmm+rmjqSWKyXp aFqeQgxiWd/g
pUey8lwucoaewgGfQ+XMZBjC9sqVl6qpbDH0F7yE1WdpcXBFLWqyWTMIM3fK 0tnC6bodyZl5
wgzMqppqzjO0JJJrDP4s6QmhBRERYYgCzjPEz3YrPhFCFBesnE6GkYSnuKMp meRaEAwxEQLa
rF6PiFYEguhFv4A+mvE2TcQAAuQFzy+vrC4sZ3MMkYKq8eVaeZ0bq/J6idzp KOiKXFqTDdUa
O0G/uaVWaTvNiGOIqlVnsKQbqzsVAuhKFLblF7JUkrWi9HB9mytmJvlUwDDD wHHHuaIbXMrV
V4URx4iIBJJkOM+W5CrpGEwkG76Tk2WvyISRxpiAUaqL09aJGIdElVTkZs4t uaGTwf8XX0C3
1Vl2NeyLoV0xuGxyxxiGx4kzymrZalSqq0Zq7/oLYQq3Bdxi6D25mEXcwTRD 24Z+cEomG4Uc
cZv4G7YjgHY03JQs8sWUDXKToekdW9Vqu0XSTZmq0XDBkh5fwtsOhnOO5W6y E1h0A531gLNT
Nxxa0WuGwpdUq857PUt63PKErqa8RurswuFVXKFz10IXow/24aOe3zqOFA3a 0RCNmHUR0Lud
Is9onlE7kPqGc6kfiD6hTscXdO2i+zeCu7j4Cd0f7dRL9O61IZOU9IDg83RF pBCjqu7HGC7T
jFgHwyAJAfWHcNUh0gjBR20qTcjv0Op/n/6F+Bv0pfcR38M1hj2kGA4mW+hx WWPEBUyT9Bna
xiyxztHRu2szxuqoDqPVu05/BUbPDUw63FmHO5L6jC6L7ytu7mPmg0sQsGVv HgKMuIARIpyz
AeeJsg44ao8pmx3HqB2ywefacK+JzFeemQtNZL72zFxsIvOtR6aP7LLe95Gj NkRzUdsH/ANQ
SwcIluFB8ScDAABzBwAAUEsDBBQACAAIAEGkNDkAAAAAAAAAAAAAAAA1AAAA dGVzdC5jb25k
b2JzLm1hcC9iaW4vY29uZG1hcC91dGlsL0NvbmRtYXBTd2l0Y2guY2xhc3Ol VW1TG1UUfm4S
CAkrb7VQKIWiRUJ4CdraKkQKSYOmTUMpSG1L0SVZwtK8mQ06nfEf+Av0B+jo J6wzODiO02+d
8Uc5PvfusiSQwKhk2L17zr3Pec5zzp796+/f/wTwLr70wyMwkCkVswW9HNmr mvlI3H5Y/dqs
Znb88Al07epf6ZG8XsxFlrd2jUxVQCuUskb+gZ55rucMgUupIwjntOOZE2iN mkWzOi/gDY2v
C/jiPBiEF+0a/GgLQOANDS1oDaAT3X50CfQ2xtLQg1aBgJFMr64tpuMJgc6U WTTSe4Uto7Km
b+VJpCdVyuj5db1iymfH6KvumJbAYKp5niTaW3/0Rfno+MgZ56Jra3PzPNyW LdkGgeuhVKmS
ixiZvFm2jIhR2Oa6VDEiCVu8ufHUST0JEFg1c0W9uldhwGvnIjBqO4Zw1Y9h gStnbtYwgrdY
BiOe1y2qcDU03gxd7ZgLsiTXNPRjVGClKRN773/JNFjdMRJHfTR8DoJA7H9S UFKFMenHBFvg
LCgNU5gmP4MVrursrApr31wtJ4AEn9H4Lr3HfswZVQVlbptGJXlHNX1SCnpD Cvo+76Hkv9dM
hril4QN8KNDBEInVvTI7nh3Keo42YJgpFQqlot2uiZRpSYg5fORHlAAKXrmk R8M8bgv4TStR
KFdfKMZPJONFDTEMCLRnjW19L1+N65YhUe5oSGCJ+0hE4GIo2bidZZGdjhs6 u4AMYdQm1JWq
Z8gNMydM0bMR5Qs5er7Q7Aw/0gLdNfPGrrvM/4GGFTzkdMow8ZqOGAulTu1v VDQ/1ijD0dZF
Cbmu4RE+E2iRkIts/mOoxcYQT2ogYhJiQ8MzbDoQsTqIWOPXTcvUNaRI2pBH 6VxokA2nRcWw
WHM5TxtACp01q6FOy1atJUaLl+ryu9BQLOVqLTkjoKtOBeXrqstKmYKrpb1K xlgy1ZSvm8HT
kqJAKLo2e5rt/GkTByL58ftHceSXh6s2rv3qGuDTY94F793h3xB8Ce01Ai/R 8Su0X2j04gKv
PfDxOsnrFIKYRhdm8CYtmn0QF9HLe1+d5ZIK2Y8BeHCZaw8GVbiHxPTIneGJ Q1wRmDjA2/tu
pFZ1flah99r7HHS5egdj9B/H0Zw4Pjm/3TghFecPIkrWCwwzLsDEfkCnjBkR mDzA9X0ubwqk
pw4xK/Ad2sO0LvyInvCU9xBxD15BWmq4DVE0cBxoWGLUJIZxj7FS1OI+buOu 4hy2Y7qcF/Ax
PlFcFxR7D0+N8OxdYva5OS44edi+e4o5B6ibUUpmJFa4auGzdflnhZ2H/ScR 5L6b/F+ZfIX7
6fDUAZZnff2+1wiqtOR6n65V5fq0keuxcj095VKrYxFm0aF6ZhBPSXaDAjzD DWziFnREsYU4
MlhGlmXO8fXfocfELn8F0pUCbajiWK5AFj7HF0ogyxFohB6dSF5idxItSzGi tBnYpi3u2h7R
lmMEL2Mc2frcEliOpDaGSVvcXW26KyGnnivzruImyyUl9YiTbflNTVt63Aw8 eE62tW3pcduf
A9BFz5+D/m1T9O0m6JyNLnrhHPTvm6LvNEGPnXp1m6P/1BR9rCG6B0V1LTn4 5X8AUEsHCLOH
BdWoBAAApAsAAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAAAAAAIQAAAHRlc3Qu Y29uZG9icy5t
YXAvYnVpbGQucHJvcGVydGllc3WOsQoCMRBE+/2KgFfq5gdUsFC44qwsbTRZ zkhyu2wS0L83
WinqdG8eDAMzs3Qsdw3jpayhkX3HVnS97wDOYcIwuVg9ZbMyOD+C+UxiT9F+ 98P2sFn0+90P
JbGObfeW4l8nykJaAmW4njSj4yQhErJ60ucRyFzVEWKDrM4C1yK1vLidtvAA UEsHCBBBqLyG
AAAA4gAAAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAAAAAAHwAAAHRlc3QuY29u ZG9icy5tYXAv
bW9kZWwvTXkuZWNvcmXtVV1v2jAUfedXRN4zMbCXKQKqllGpUreifkh7vTiX 4C62I/sG6L/f
dSAUtiFRqVNf5pdI9jnnnnOvkwwvNqZMVuiDdnYk+mlPJGiVy7UtRuLp8br7 RVyMO0NUzmM2
nYH6CQUmG6OzPWnApE7Ci6VsyPhsJJZEVSbler1OnSlS5wv549uNaCHhGLL+ 3CAGvV6fYbcP
aokGutoGAqvwULzxccRFVeoqYCOAZhFFBnIaYSKxYBisnM0NVFsZG57ub44E 5hgouLImDpMC
MSvMPC705pU5ZuoQJyWEoBeacyecIKOXitV3nWkO24oTZwm0Rd8wI/eBfK2o 9lBeI/AT/yJx
jwv0GAPvZLBEg5ZYtq4q9FeutvlIdPvbJHHh4x8ekrN680nK6d38GRUJ2aST h/Hemvdyn/OO
fULsZNgdQZ7PvONdepkswRZ4qwPha2siaQaesRTrbElli2kDRrsnZOSutDyo fdKNR+NW+HGG
zrkGl0Rez2vaXwMQv835KxDEjfNHzXX5hX6PUV/9H/U/HPX8g0fdlmv9nAqe tN/mRu17g32G
FfDHFGxIT7eLHR39ScadX1BLBwjAXubvsgEAAIIGAABQSwMEFAAIAAgAQaQ0 OQAAAAAAAAAA
AAAAACIAAAB0ZXN0LmNvbmRvYnMubWFwL21vZGVsL015Lmdlbm1vZGVstZRb i9swEIXf8yuE
+lwrDRSKibNks5uy0JTQC/RVkcfOUN0YKRf/+8q37KZNaaHUT5bmnJnvyMLz u7PR7AgU0NmC
v8mmnIFVrkRbF/zrl/Xrd/xuMZnXYI0rQefvwW7aF3Y2mF98s+SbsPSkbjbk qVbwfYw+F+J0
OmXO1JmjWnzbPPFBAsoRXIlAafQBOiGYSsym05l4bGUvW48gf7aOpJx1hgck UNFRU3ARIcRM
OVu6XciM9CKQ6od00q0+1GifHgr+s3Do9VGaxL5pOEPjHUWgVpymX0gSRTbW MngOoZzxGqVV
8AGObYq37Ykr5xvCeh/XCLoMBa+kDsAXyTKvkhfrPspi0/TN5uJqu9Wlg9lK 9V3WEJgnqPBc
8FUi76hLDN4FudOwJXfEEmgth8OIdID0zduug79N1o95JTqGvvtKyxBS867S LV4KRZoVJVqg
wdKb1iDjgZLLuohVMyZjilIBVnvU5WXPk/NAsfmcTm21d6ggXOENvQrerfLH T1ABpcsK7BaG
AA0GbAxcDBnEc4i/TrW8neYW/k3GZYyEu0O8YlwK+U9Q9/8D6l7sfgfVrcfL lX4G4pe/wWLy
A1BLBwjvAxs2vQEAAEkEAABQSwMEFAAIAAgAQaQ0OQAAAAAAAAAAAAAAACIA AAB0ZXN0LmNv
bmRvYnMubWFwL3BsdWdpbi5wcm9wZXJ0aWVz41JWsEnOL6gsykzPKLHjAvL0 kblAARXPFBUu
roKc0vTMPL/E3FQFWwXfSgXf/JTUHK6CovyyzJTUIqh4eXm5XmpFYm5BTqpe flE6FwBQSwcI
z8rLmE0AAABdAAAAUEsDBBQACAAIAEGkNDkAAAAAAAAAAAAAAAAbAAAAdGVz dC5jb25kb2Jz
Lm1hcC9wbHVnaW4ueG1sVU9NTwMhEL3vr8BJr0CNF2Ng92DSxEMTD3o2yI6U yAIB1m3/vdCu
H+Uy84Y3894Tw3Fy5AtTtsFLuGVbIOh1GK03El5fdvQehr4TA2pnY8Y/6l2l 1p9O3FDaEaFD
PCVrDqWvgP9DHdk8jZuO0saNbjbWtyEhAo8FfTtGYrC+SAjJsFWH4fRR+5CQ GfSYVMHxLSr9
qQxC39bbhXWwwsubk5VwKCU+cL4sC3vHXHJwc6lCTBW4Imuncpaggx8nFdnj pT6vOlfUamMf
RnQSplb4/tScnXvgZ0eC/yZqWflP2G9QSwcIPW4dT+AAAABkAQAAUEsDBBQA CAAIAEGkNDkA
AAAAAAAAAAAAAAAkAAAAdGVzdC5jb25kb2JzLm1hcC9zcmMvSGVsbG9Xb3Js ZC5qYXZhrVZL
b+M2ED7bv4J1e6AWKb3Za1BgpcRp3DpOEHubwyIwKGmccEuTgkjbGyzy38uX pMjxK8XmYIrk
N98M5xm2KGSpkSwfCWScFQpIJksgOdU0ZSJn4pGkQIUiif29SRWUK5pyUGdd doSsrAXIHVC+
eLfUghZk2Ki9psVWCljMWwyD68tDtloRcKoHE10uM70sKb8EalbYKvBtTrO2 nWqtyeR+ekjT
W8EVgzWUijSSI6b0uRQahL4t5YrlUP5vLuOkEU2BH0FUCVv1/7jvreDw0J13 sDJ2KzIBDplm
UsQ5LfQerk38wO53ojl9lktN/ixZfmEefgxu5D53ItcsfwRjQLLUWoqDsAum CkN+EDd5As7P
uhUskyK3+RufbZ4kb07O/XpJMy3L513XtzT7lz7CtmtNmbAe73aLZcpZhjJO lUJXxiJ5L0ue
ox/dTrhSmmqzrCTL0cLIYVMAJpW+PiBaPqrIIjtzJihH4eUoD+sfSMC6OsWR UdfpuMIm5VLc
M/10AXO65Bq3y4IY9zgYDkTRiRHsdCzZ3VIIC8Jer/kLVjrzDG1zEYxybkbK /XqD3EnNfRbQ
WWmqGb4MsYPWx25HZAEC12f9Ppo+ATJWI5ebiEtZhLv1E+OA8C9ejin7eqkg x1FjWIfNDSIY
QIzePBa5BVKdPbWAnQqkOEDRWNB56bZWv7zY+5fu1sjVzwv+8EoUUaB9+mPr mqYajBlWWVPq
aBXc1xxh5TArGzCbVKXkOGoYbfnVrG5TfZDL4Wg0S26mV5HPir2tDRWV6r0w HIxR8OamWLm7
9mgwCWyqQQXqjbtPD84uC/j68cFg2jMiDB0LNeT2/X8LuRYDDgvbq3B0gtpF aHqmaXGUKxLP
ZjFy5jjy059KnsxmiSXv9vuvjd8cx0douEm/mW5LXF84QT3as7Q16+nPYU0d azsBziVfLkRr
JCFevEmALTBsTTvp/fbj40uvyYU2hBfuxreGuhGizPD7CrmWOfBXqTQUhSmG 7QGySYiz3dE4
vxlP4+F4cDebDUaD68F4OvFV5ScJSsOr/BarE9NRyO2XyZUDpVb9FL5r3DNG sflzLxzTPK9n
oTUBzAtcnW1OVNcLbWfof0BYSPH7X3RFc5lF9gx9QJ8VwLHT+Vc/tvyxaWdH DemgqG+Xzzcr
KE39Q3ejaW8QtxkQVN0wRtS4qz35CAzHk2k8Ph8QH724apHUOi/GvfhTL5xk NiGbXLRexNR3
HxMQF4sD5ElF7iKT4F6ylzytyDGOo02A2eGPURSsHJvgxRUXxslW+KmHJx6e BLht97sa/6v8
fp3bzqHt3D/w8hrsPfCeUNSBOPUG7wnDe4JQh2APbQhACeafdIEy56KX7n9Q SwcI2+CVPPsD
AADFDAAAUEsDBBQACAAIAEGkNDkAAAAAAAAAAAAAAAA3AAAAdGVzdC5jb25k b2JzLm1hcC9z
cmMvT2JzZXJ2YWJsZUNvbHVtbkxhYmVsUHJvdmlkZXIuamF2Ya1X21IbORB9 Hn+F1g+pMbgE
5DEsu1AUbFELIRWS3QfiB3mmxxZoLitpzFKU/31bl7nIHkM2FSowM1L3Uffp 05IyGvG8KqUm
D2zFqIZ/Nb0BpdgCLkuZM30czNeaC3oHONoMl3JBWcWSJdCkzPOyUFSwYuGQ 7rS8LsvHujr+
XvO7eq4017UuZeADieCVMk4SaMo0m/Mi5ehYzhXIFZsLoDmr6NUNq86XiAjX XGko4Adhbttv
BPwhiDaQixUUehAC8gzfDc7FuWBKvWV0O3+A5E0oZLFOdC2ZuASGTxh0eMhY AnTF4Qmkouel
qPPims1BfJLliqc7eAu9AnuXbLo7W/Wk6UKyaskTRa9yVBiq6GBvb0T2yBlZ mFrxhAiDSSoP
SrJSEr8cqRXSTFhBOqZJUhZYZd06INjBqKrnAqESwynpKjmQJEHZQZEqMjT3 MopMeBHG9wXy
SjANxOjUjByMokrylRlCvk1c2pt8QQtMrHNdAmEabeY1GqMy1IZ/xgsmSKi4 +1nng5+ojKhz
UJppTC/sFqLMuyQnpICnjbnYDF3cXJpe/FrFk4mFawJ0hSPC9wvRJdGSJY8k sROb4W53mElq
Y8RFsW0aTwyr0eldXVUSt5m/mSyQPBWP6wL3hOQR0vEEDXwFVyVPCQKklhQH FYeNRcD8dbAR
7kyEZRk2CQpRQI4zCmOxJjTlWUYXoL1Q/4RnFRsmominjk0W7sUltNMwNjBR 9KrWqF5yNd2K
z3lGEdXlmZTs2ZUnijIuYWi9uInJmq1H0bqvttOKSZYH4umP90Xa1NVR/Wro cajOAH5qid/u
AVcSk7OV35a+XwIUsp6G3pjc+vW81M9PbLPt3s6NBvYok822jcwOFnOUEMfZ w2N8/BoaUQHF
Qi9xZn/f6ziYv+czytJ0u5e22q5RhIusHzAuHe5Pltx+l6VcVaUC36A/JWgJ ebmC/xO3qivs
kzaUMEx7ZOA5oe1L7A5DAq6NXAwS8LwrSFELEfr6GqKzSX/Ql2ckDij75cQC kXfvAu585kjU
b+TQp+7wUD3QbTpG9H58iLmZa/IBnhuMAYqjZg7p3dSaYRzzi5ukLL4hNTK/ cdzu/xN3Uhjj
v5jkRvqfQZViZbbnCe2l0LxaKM+td5aAhCQQhz1LbB0HCrF9ernDuQ2qPYjb K6PNuO3hDX5N
RN1072hzPHk5uX+nt5iZxG7vHLwchF0o9l+P8NwcI3YAl8vsFfgTk5YONKCq ElzH4+nY8dta
Vt6m53F/OGvMv32j3qFTC1kxUUOP5fsrvMosUP+IpQA/4srDTGatL89i78gL ZLJIoMyIvxga
pVoXrxwU6BFplONumATc44SgIJzXxMJh3e2MPxGNMGPSCPPICbOPbVXZgjvz 7Zsnydzzg1/X
aO7iTIgtQ1y3A7NJek/j8ZHluBlQ+KdmQnlS+KzvEDVcbmf1B7aEx/Kp4c9c Antsvtaj/mPU
RrCT5m7d72UzWmOVFbR+/fXduuugWy0BnZKG6ulF66z8xwkZvxyO2wJ2E/s4 Mx3v98V55DTl
8t253vugxK8CvveA6+Hl1z4uvzME/8ekzjruO00d/8021jDj3V1tmh36d/eN Nyjni2L6QMbj
5lQxG9B69B9QSwcIfPeocr0EAADpDgAAUEsDBBQACAAIAEGkNDkAAAAAAAAA AAAAAAAjAAAA
dGVzdC5jb25kb2JzLm1hcC9zcmMvY29uZG1hcC9BLmphdmHNlMFO3DAQhs/J U0wBaWHVOPeS
rjaiHJAqFRXulRNPsgbHtmxn6Qrx7rWd7MLSLBWcenJiz/wz8/2W8/k8hTkU tdIbw9uVW8Tf
fO8/bJ1csRO/5qmm9T1tEWolWUf1eZryTivj4I6uKamQSkuujdJo3OZiRWWL 37l1KNGcbyOV
aQnWgmuLBLvGfyuD5PJHdYe184L52NSnLIMKWy6z3qLJmKohy2KDJRjUBi1K Rx1XElQDboXQ
KYYCVBSCWYHdoqgWZZFXiyL3PzOy00XJXqvGMx31b71Wo4RQD1y20CB1va8G 1CDYXochkH2J
8b2ICQCF4IvHpeDyfouGlMctuhJCG2Ws/1TkPmogPCYWud7WXlrcYSUXw3o9 0I5Cp2cxKs4Y
v9pAlfpWBmP6SvAauHRoGlqjh4S/PXhmYUQLj2kS2CY++Sf6kaSN1NZU9LhF OEENqHOGV71D
EnMPGZOMAMN6NRri70NA+FK8fK0K3MqZg1ogNZ9jto/1qA1SITZgV6oXzBf0 9prYJwWGtjZc
R+9DLCFja/lYf9rkcLI0cfQDk//V3KAbvTm2wYUbfyDbs+ftNyz7FUxLnl1L 9m1Lgm/JIAiD
xf767zy6QTdl0D9v2fsMOwxKU0O7sXioLPHhvcTGezs591pxBi+QDtp7BD7Y +PAMiPHd+UYd
vd1o/Hq0RXY5/UAdvdEnZWw66XR6e1f9P53HYKfW+PGRniDPoUz/AFBLBwhD cDe0IQIAAEAG
AABQSwMEFAAIAAgAQaQ0OQAAAAAAAAAAAAAAACMAAAB0ZXN0LmNvbmRvYnMu bWFwL3NyYy9j
b25kbWFwL0IuamF2Yc2UTU/cMBCGz8mvGD6khVXj3CFdbUM5IFUqKtwrJ57N Ghzbsp2lK8R/
r+1kF5ZmqeDEyYk9887M81rOp9MUplDUSq8Nb5ZuFn/znf+wdXzFjv2ap5rW 97RBqJVkLdXn
acpbrYyDO7qipEIqLbk2SqNx64sllQ3+4NahRHO+iVSmIVgLri0SbBf+Wxkk lz+rO6ydF8yH
pg6yDCpsuMw6iyZjqoYsiw1+A4PaoEXpqONKglqAWyK0iqEAFYVgUmA7K6pZ WeTVrMj9z4Rs
dVGy16rxTEf9W6+1UEKoBy4bWCB1na8G1CDYTochkJ3F+E7EBIBC8NnjXHB5 v0FDyqMGXQmh
jTLWfypyH9UTHhKLXG9qzy1usZKLfr3uaUehk9MYFWeMX02gSn0rvTFdJXgN XDo0C1ojlIB/
PHhmYUALj2kS2CY++Rf6kaSN1FZUdLhBOEINqHOGV51DEnP3GZMMAMN6NRji 70NA+FK8fK0K
3MqJg1ogNV9ito/1qA1SIdZgl6oTzBf09prYJwWGtjZcR+9DLCFDa/lQf9zk cDI3cfQ9k//T
XK8bvTmywYUbfyCb0+ftNyz7HUxLnl1Ldm1Lgm9JLwi9xf76bz26QTdm0H9v 2fsM2w9KU0Pb
oXioLPHhvcSGezs690pxBi+Q9to7BD7YeP8MiOHd+U4dvV1r/Hq4QXY5/kAd vtEnZWw86WR8
e1v9k85jsFUr/PhIT5DnUKZ/AVBLBwhMh5JvIgIAAEAGAABQSwMEFAAIAAgA QaQ0OQAAAAAA
AAAAAAAAADAAAAB0ZXN0LmNvbmRvYnMubWFwL3NyYy9jb25kbWFwL0NvbmRt YXBGYWN0b3J5
LmphdmG9VO9KwzAQ/9w+xQmD6aDtA1iLnSjsyxDdC6TJtYu2SUkydYjv7rWN g85NGIqf0rtc
7vcnvSSzWQgzSLlut0ZWa5f1YTKKu9RkISa0JmHL+DOrELhWomHtZRjKptXG gTZVjLyWrcUY
m5K+tcH49o5xp82W6hKPdRZFUGAlVbSxaCKhOURRj7taI6RF5o+kSZFBqQ04 SjdaYB13RQsH
rdEvUqAFBtwgc7SNbq1FX42Mr0FpFbHCOkOtgNfMWtDlXqOeCCrxjca1xZ2+ +GZY7wfZ/XaF
Cg2hisGQTVFLDlI5NCXjCP6EVwH45gjEwpcT8B4GnRWBF2ylqmp0WlEL65ii Dp5qORyI+9Jj
tgVHlQRjrkFHNtgnt1g+rvLlzS1c7RTTfdbxuG7RpaSS7vyCLnJH/wHdxqju GhS+gi6ekNwm
8oPh0xSbjPo4JolDmlA0/ZUW08OdjHbIg6HK/z27+GR1+b+oyn9Uk3sV+cns 5//Cfv4j+7ln
Pz/MvhuDrxfHbtruoUEBxZY2pP2TAfECTgA6NlP+iYAK3TjTS/uAJBkPVfgJ UEsHCK6ukL6i
AQAAfQUAAFBLAwQUAAgACABBpDQ5AAAAAAAAAAAAAAAAMAAAAHRlc3QuY29u ZG9icy5tYXAv
c3JjL2NvbmRtYXAvQ29uZG1hcFBhY2thZ2UuamF2Yb1YW2/iOBh9hl/hZUfq TLUke3nb0qoO
k84idSgCKu0+RSb5oJmGBNlmu1XV/762cw+5kHJ5IrGN/X3nO7ZPjn552UWX aGAHm1fqrp74
jXrVc++y6dPI+SR+9e6G2M9kBcgOfGdNNlfdrrveBJSjgK40sD13w0CD9VI8 BxQ0E3NO3cWW
w1XDwKFHGGsa9JVwMn/dNE42CaNsGjaFJVDwbTGwq0dQ/NTvowWsXL+/ZUD7 TmCjfl/BMn8C
NFjcRHMP9MUNWgYUcdG8DhzwNDloxCU0nLg+Q8S2gbGAsnQccIKCxQ+wOUM8 QBQ2FBj4XC29
9dQ6CA089waI/YRsCcovA128F3qWQPiWAgqWqGEk+Nt1sYP4Tvg3RwCKuEA0 GTDQozAUEuA7
OzjcMkjqrw3D3zti84C+qm4FBnp2fee6F9GlpzpW4AMlHJyQSduF59rI9TnQ JbEBRVNF+CL4
j4vVGYqLid66HVmkTlSKmIk+WYOmWqtq16nMppMPqyPj6swEY/0VgjH+bqJr 1ItS7QmSVAbA
NjKDx+noNJHMLDG1jOWJ882fuv7y8qItgHEWeFvuBr5G+B7hnQ6pmTWZmnej v+vgYmKoBzzw
RckZJ2LXSfLyNNKjhlYk02g8m+PxUBY0pq44GzwtP24km1zf5Z+/FMPPbF3k OsmOvni79Vz/
eWdSeQIAlfOhAaxvkpaBLt7eL8L9elDG2V24u2r1mEK6P6+AJ//8/KUcTbFJ 0fBhPMejsTkV
EP5aRCc+jrLIyLzFeWl6sBYnHJMHpsr+Qhx70bmLPJfx49Ud3QbUETOXhm1Z 5r353RzPZ2UJ
iENyAVQyknG6tUUyxIuzYjFRL3ZLeYxKtsjhzsTzx6lpDR8ex3ORx2+H0BQn 9MQnpCVuTUdc
R0NclnUN/XCGdyQWI6ctF7YsfBjH8Pm4hY/LKSPhlHFCThmtOWXUccoQWf/e glPG+TllWJZx
GKeM83HKKOXUfqSSoZoTGmyA8lc0fCK+uL7vxTUB6ZGbqNaDWfWD/EuEkiI+ 0+I1wyXjFVuR
zCyfo4565mT6MDGn83+s4V94/M207kezuRnesn/kQJuCqKn4qih8RyjkVE13 NmRyU5VKkIOw
oyqYulhKrkptF8xkRDlC4VchykuUqz1BkW15pVGNkKpeJFQUWqlqOSlYZTHu LF8LXDbymGhy
4F66Lv0CzmFspRPuC3Y5A3FOXZyBcbgSMNzEMNyOWcm5v5u00jBnybwQSAMC OW0Vc6RSbKXW
jULHaoFPORmMnCw4AxmMSiiMJjIYxyKDocTHWTIvIUMNAjlRFJOhUiXlyWBY LfBJLusEm8ZL
FzWLgNPBmIl3Dy2SgXZPLRHaY7EHohh33Wv8b6+iLrEjiurkR1WplqFrJ54J RzYVqhHCjji6
REFGBudxEP/QslUOT+Q8RvdXpiWfdl3UX2Epbj0mrl8uVvCq7FoZbWrYqkml VSofKizbQled
Z1sYmjFt054q11aFosextDDJUu/1Pk79rdsJMSvT6RFARzO/agtTk0ulJs/6 X22Ee04oFaEK
sYovh6wNlriK2q5CbYHivkZZTKBDkSvJLdWB5X5ZeaYFnXggcWrsqOMSBbcn CG4mBi7ChD9K
hFLL6oTFT+/2yLnKp2G1T6SlM3Tc8hrty2s0l9co4mJ8tLyl7tFZyhuZSPk0 rI8l0sajObi+
e0irI/k0VSAmOqvOsMkBW6vG3rvdd6Tr+fC6/wNQSwcIN+IW0A4FAACPHwAA UEsDBBQACAAI
AEGkNDkAAAAAAAAAAAAAAAArAAAAdGVzdC5jb25kb2JzLm1hcC9zcmMvY29u ZG1hcC9Db250
YWluZXIuamF2YY1TXY/TMBB8Tn7FIk7qXUXsd4iiItSHk5BAiHfkOpvUnGNb tgNUp/531k7S
jxM98eTYXs/Ozkz4el3CGmpp3cGrfh+bvOVX+3R099je0cpLJ+ST6BGkNe0g 3IeyVIOzPoL1
PUOplQvIcOiYtMNgDRuj0mz7WYV4uxSl9ci2X3Y/UaYyPrN6U1Www16Zagzo q9ZKqKrM8CN4
dB4DmiiisgZsB3GPMNgWNdgMBKsah6beNZ8sVSmDvua7puZ0uGInfDTtS/R8 53Kf74TZWa3t
b2V66FDEkbqC8AhhdGkYbN/n+lHnBwC1Vs3zRivztGjETgTe9hi3GgeiHSCx WzaZ1bHm9HYy
YIaruVsYbQLiJWJav05mJNhTj/uHXJ2VyF890qkgopN/404rCcpE9J2QCKeH gH8iqRFgNgKe
yyI5URDIN6TBTcga/xJ6xEXwRePzIIvE5FCHHg210OQ+yzhJz7RLg8SsQpIy YR0cwizbq/E4
TkC3slHM3qX1cc4ECpPcu2R8pftLqqCCWRFFjcK/y0j0jmh6FFofIOztqFtq TmmbyAtoMUiv
XI5iqmVspslnLv/OWrrZ+KztDWlfJTr1+N9g/FiwKCHFOSLFdUaKFJIi/7D1 LHkDF7G9f6Af
9Aicn4NT/gVQSwcIB+xh0+QBAABGBAAAUEsDBBQACAAIAEGkNDkAAAAAAAAA AAAAAAAsAAAA
dGVzdC5jb25kb2JzLm1hcC9zcmMvY29uZG1hcC9pbXBsL0FJbXBsLmphdmHV Vltv2kgUfja/
4iRbCRPB+D2hbNyUVkhRUy10X6PBPoZpB493PCZFVf575wY2xLTVNkHq09hn zvU7t4kuLjpw
AcNEFBvJFks1sr/R3r8hvZqkr/QZdQqafKELhETk6YoWhK0KftXp6ENItaPG V4eUG3d+dOK1
xGe6pmSONC/JRykKlGpzs6T5Am9ZqTBHefVTzmlVGIZap5ALgglnRYkEVxlJ xGolcpILxbIN
+WAOllDFRH5cBhMhkYxvOC3Ln3EZDMi4qXdiUfkFobv5Z0yUY+9EPhtngwHM ccHyQVWiHKQi
gcHAZibOwcjhCnNlDYHIQC0RViJFDsJqg+4QV6PhfBQPo/loGOmfLtkpxjx9 onZY2GOmFWWC
c/HA8gVkSFUlsQQqsbaK6aWVqLgVARhyNvp2zVn+Za8mSGyC+muBKgbjTmz9 eBxGmt3VmNcw
jIptkV0vTMKptuFKrZpzlkBiUgBWHeBXXRNpCQ3catc0E3zrBIVka60DWosE Sn++hhwf2nlC
tWRlT+cjMAkJPDApZrTiCtaUV7iFvesjt3GGvWakXaBKSTavFBKr5Fhag6OZ MTfXJeJWvSPU
INlfIVOU7icywQulgcEUSlMgCWQspxym2hOd0vh+/Hb8Lv50OzPxV5wfBpnQ ZKll/5QYfVhU
R1OH1ozpf/qzZ37Poi1DDYKus0CXEspQF0rw+Pwmr+/WKCVLsWndjSPAqc2t /fG+SNS9msP+
lCW3TGmlvDTz+CWc9B3q0+Dro+EOfVGza8F0mRuj3gHd0bGz7wmCp7GuDeNG QF3LGyQCPwRI
xiTuj4DwnJ73rVzfqTPsLIMQm+P9H/yv0qJp2NP1GgTubhOaifJkDdhp0ocm mUzHs/5hruL7
+3hrmfaeu6rgw92sBT2apu1bN2wnA/cfuw6wOB5Xs+M/TTwSV2KNzxHSDzW9 VFQtve+Cc+sO
8D2qkOVqu5snb/swF4LrR5EOvRR8jTXBvDJmmwJ9XA9MJUsId5KOHCS0xLZS vDSX2z52nW1a
4bFubjv+iHWp4c7OjZ35U2FkCwCnTxHy4Onu/Nfstd/Bw04bP256O4VXDay2 IHl0pvvoNEVO
CMqnvDyE5bdRqBfuj+J3lmv1p4p72wQ4KZ9UxDM0RPMh5V5S8Ld+hpz570s4 qzmIXhZ6B4f0
SAM5D08Pkd+RSrgPv7ntrpuUevB93ej1Bnu+1rzmkeW37Jsqy/QY1Y1vnsfu Xd28CQ9lLQ6O
ndCi0P6H5xDSSzhvuaEttG6v66nWN3/ZdM4g+AhRZJ9rne9QSwcIwVGojcMD AADmDgAAUEsD
BBQACAAIAEGkNDkAAAAAAAAAAAAAAAAsAAAAdGVzdC5jb25kb2JzLm1hcC9z cmMvY29uZG1h
cC9pbXBsL0JJbXBsLmphdmHVVltv2zYUfpZ/xUlWwHIQU++J56VKvcFA0BSz u9eAko5stpSo
UZRTo8h/H2+2ZMduizYxsCdKh+f6nRuji4seXMAoFdVassVSje1vtPNvSG+m 2Rt9Rr2Kpp/p
AiEVZVbQirCi4te9nj6EVFtqfL1PuXXnByfeSnyiK0oSpGVNPkhRoVTr2yUt F3jHaoUlyuvv
cs6ayjC0OoVcEEw5q2okWOQkFUUhSlIKxfI1eW8OllLFRHlcBlMhkUxuOa3r 73EZDMikq3dq
UfkBofvkE6bKsfcin42z4RASXLBy2NQoh5lIYTi0mXlbgpHDAktlDYHIQS0R CpEhB2G1QX+E
xXiUjONRlIxHkf7pk61iLLNnakeVPeZaUS44F4+sXECOVDUSa6ASW6uYXVmJ hlsRgBFn4683
nJWfd2qCxCao3xaoYjDuxNaPp1Gk2V2NeQ2jqNoU2c3CJJxqG67UmoSzFFKT ArDqAL/omshq
6ODWuqaZ4GsvqCRbaR1wsEig9ufvUOLjYZ5QLVk90PkITEICD0yGOW24ghXl DW5g7/vIbZzh
oBtpH6hSkiWNQmKVHEtrcDQz5uamRtyod4QWJPsrZIbS/UQmeKE0MJhBbQok hZyVlMNMe6JT
Gj9M3k3+fPvxbm7ibzjfDzKl6VLL/l9i9GElOpo2tG5MP+nPjvkdi7YMNQi6 zgJdSihDXSjB
08ubvLlfoZQsw651N44AZza39sf7IlH3agm7U5bcMaWV8trM49dw0neoT4Ov j447yauaXQmm
y9wY9Q7ojo6dfU8QPIt1bRg3gsS1vEEi8EOA5Ezi7ggIz5PzSyt36dQZdpZD iN3x/jf+22jR
LBzoeg0Cd7cOzUR5tgbsNLmELpnMJvPL/VzFDw/xxnIyeOmqgvf38wPo0Sw7 vHXDw2Tg/mPb
ARbH42q2/KeJR2IhVvgSIX1T02tFdaD3XXBu3QH+hSpkpdrs5uk7XStCcP0o 0qHXgq+wJZhX
xnxdoY/rkal0CeFW0pGDlNZ4qBSvzOWmj11nm1Z4apvbjj9iXeq4s3Vja/5U GNkCwNlzhDx4
ujv/MXvtV/Cw08aPm8FW4XUHqw1IHp3ZLjpdkROC8rGs92H5ZRTahfut+J3l Vv2p4t40AU7r
ZxXxAg3RfUi5lxT8oZ8hZ/77Cs5aDqKXhd7BYXKkgZyHp4fI70gl3Iff3HbX TWs9+L6s9XqD
HV9bXvPI8ls2bvJcj1Hd+OZ57N7V3ZtwX9bi4NgJrSrtf3gOYXIF5wdukgO0 /qDvqdY3f9l1
ziD4BFFkn2u9/wBQSwcI9ASxGMYDAADmDgAAUEsDBBQACAAIAEGkNDkAAAAA AAAAAAAAAAA5
AAAAdGVzdC5jb25kb2JzLm1hcC9zcmMvY29uZG1hcC9pbXBsL0NvbmRtYXBG YWN0b3J5SW1w
bC5qYXZh3VfLbts4FF3LX8EaBSqntbSPk6Cyo84YKBwjMQaYVUFT1zJbmRIo Km4wyL8PX3or
yWRQF0UXhijykjznnqtD2j87G6EzdEHS7IHTeC+u9Kvfelddb5fRW/n0Rxkm 33AMiKQsOuDM
o4csmY1G8pFyUfWe1V1f8T32toBZ7q15mgEXD4s9ZjF8prkABnxWRqY89oAk NMvBg8NOtlMO
XrhIcJ6/FHSNBd48ZPBS3M32KxDxUtTakKxJDMcp7l74CROR8odlKxHDE7Kk iCnzQvWy1m05
w7cavJlO0RZk37TIgU+jlKDpVOsRMKS2ggMwgQVNGUp3SOwBHdIIEnSxvbIY LvztlVctBizq
LfUxVinHAiKjZrFNKEFEpRgtjHgNPgi+S4miHDVJ1li6U9A/I0exceRGCw5y l1zDjGCHi0Sg
nQ1rk/F0/FP0nSfZOG06juLjWEK5Wpp04VFGhTtRKB1h0DpOJ0TC7fRcIrfd MynLw7uVcHO5
krdc3W2C1SL0YhBlqtzxXojs3PePx6Os/1zkaVJovliMJzOkNqc75PZ3fHOJ WJEkBqjjcBAF
Z31kMzX6ODI/ggXZIzf8TiDTFQJlyy7TqLkabpLGbh04s2vZDRkcB0rCVWGP o77QWBYpk3ln
BMrytHqfQuAhYJpoXkiL6YH8QZt/vLkHzmkEFQ5rKIjoLLjGrBDohwV0pFoa 06cqRDfojgJf
XrsTqw/BOZSsyvpa3Kw2wXIV3p4jq4nZRoYJTJnlOTw36MwJnomdd2LnNtZ+ t+e6DMWep0dd
FMskgRgnAY8L9RFXNeeON1J04yXvxug9qimv8AGkQO/R+B2iOWKpQBjd44RG Jl5nY1xW4E9R
riXcJ54e7gSnLHarowRB2fqAzJg2EIqTv3BSQEfdMvZVAofr25t1eLv5+8vi z2D1R/jl8/Ju
EyrBm1++gRgOn54N5A28LaD/X8tILihUKoycTY6/oKJWJHkHkSNikz4nqFW/ dKyfraiB+ISk
FfKWoE2gv6eitbUbd+u7nc579a4vI6SKvixPrHrU+FiddDNymrPBog9qv9Vo A40SW3RBDxU+
KZp57egazVyj2Vo08x6a7UnRDJf7f/a31zmzZeQOLzvR9wSv5/7PeOjp8tI2 rpdc4ZV+ZvNg
+Xa88TmHOekX3vBMpPy11eO2FWwPTtQduwr8MTgjyDiQEujAWXPdCBj8i9Hg Mkiic0xAeQU3
+B+R7/dvtKN/AVBLBwhpClpPmgMAAJ4PAABQSwMEFAAIAAgAQaQ0OQAAAAAA AAAAAAAAADkA
AAB0ZXN0LmNvbmRvYnMubWFwL3NyYy9jb25kbWFwL2ltcGwvQ29uZG1hcFBh Y2thZ2VJbXBs
LmphdmHVWV1z2jgUfSa/Qk13ptAhpn1t2mwNcbqeSSCLaae7L4xsC1BrLEYW pLST/75XX/7C
kOy0yWZfGixdXV0dnXt1pPZevjxCL9HbiK22nM4X4kx99irfsuk3P/4N/vaO Vjj6iucERSyN
l3jl0OUqOT06gj+Mi7x1oP9e4Egwvj3d032tfTV1C0xTwgvHX/AGOyHBaeZc c7YiXGwHC5zO
ySXNBFGmxpLxuUOihK4y4pDlDH4zThzPFYLTcC3IXYaDBGfZXUbnWODJdnWn sxFEigVl6V2G
dSj2mI3JjHCSRqRAptlSbkvu1dd71DOb/ezkBIVkTtOTdUb4ScwidHKiNt5N kRxIlgQ2QIaN
2AyJBUFLFpMEvQ3PjMe3vfDMyZ2RNN5x9X4udwULEmvarMOERiiS4KLq9svo EPkGuxhnqBxy
EUt9CPpx1JKraR1YTmtvdK1qeC0ZX2vF6QY+kd5/SUVNQfP9DqXrRIL4wPPi R54vfLT5bMog
0pzAhcFuLANOwAegA/xMM4EhAQ4xs4s4xA1uOYnRDRUL5eTH+4SmX+9IQGes RvIt2mm5ReFW
TWlKoHJqy+HHsY82OFkTRwO0OhsyQd4oe5iAk0igGwzjGYrUYsqeEM3QhmLV lMnEi5STma6e
aEnEgsU2/uc0pQLJf9qd2y66WdBogXCSMQSgzhhfZmqwNKA4od8reWwm7AIK gJFY8zRT7SW8
rIn2MkMsJeAeYo63kKVglTk/w4+MkPtuQTGg+dx4TobBFIAv7J5rWA4zcbf6 tDuyoLSyNSDY
Nk67qHqGOcQfBhN3OPA6p0et24dLFE0AFDKWEMn3zIc1wb68Az4kGWlIi4Lu 8BOncbH3RO9u
NTsQkASaqeaJyh89TLbjdIsYjOEZWq+AN5peQLiYrGSBdhAKVFlWg3UjnEdU JieH4CH2bEYh
XMiVCCfA2Lmay5IYXEJrZbCwlINqRCAGgmImh0EoMBJ+EFg2zDspuYkBLNJI dLkImgIWDe5j
KvMw2XbBAlo5REJ0LLJI6DjzDKEiI8ksT+fRrNKvcYaDqTKXxKErF1jMqQBU ThZ4Q1DKBNoS
ASslaTnrdGmhvCgkGtAZ5ZkwJUMxRU1cDFS4kGI6OQYcpSUOSD4gccOAWWSV vdG7TgQ+0aWT
hV8AlEzvPkRerRTao5nf7g/sjA4Ffpfm6aKMqsqc5sNfZE1TLaEQcqlkoBwq R7CnmaroOFXk
y1H30w2LShWsYMANhVglmng2k8VVEjePWSywUHjrME31UpiX4v3pOtZQgDRS JtukjpXqxVak
vETpAPZY7RQGLZ1MXagJIV3wVPmCWt221aJjqjtqV+07O0XWsWXNmRNhe2uj HLPOjiw+rV4P
jUIpjuQhYg6zMimL87HVIPRge2tLeFcPUtp12veM1IaWCwPgScO0v++e53f4 e4NSctN4WGgY
SoVZ8DWx0OianJcJxf4YlI0lP1jtQODsYY316eeUyTMx99vo7wDHrM8rzL+W ogNdQtOYRjJ2
qPYRTl/IIoUipdHixllmnJDvxLg0fNuxeqDDUueEEa+wf/mV0SSDCacm4x82 mPxyVglo6pk7
TDWydmHeqUWp+BgAqSKwxMkF7PiaExgvO9qvHkp/1CF1qwHjx4Awv6WrAKZu HbO8v4OfFFb9
aqDho2PVn/b3YxU+Bazy652qto1XwOoK7ronPmi4VfFvErrUUgO72tmRSzS/ fXMstR/42lDc
FwbmiNh/YdAX52YJWNJ+Nc1tLgzzNQa9G8sTwyhaK8GktgcVRgvNBuxTIlmp 2J+SW3u2acNo
jPacniVRZCCxquhUHd8FTg3nt3qoUi8OsRHmM5MuYLb7OKRD0J/twWg4cf2h N5Zb3jJdebVv
10bDRdPaT6fepXflDSeBPlNxs3+37DfP8ja2/tzp1NUOwmYH/WYHoXXQn077 nRogWiVA2kkA
7vGEY7zbFpBz49G1N578NR384Q4/eNNLP5h4BqRHyQu/dCNqyg0mr7XmYebg 60l+9ytSyKSK
vVvpdHmCqXJAGNbuEAapaspUISynTUmiFvI/I2KIl1JTu1fq2US1ZNdw96Pf lNK+HnsX/uei
C5R3u37ZMASU3FOXdsCX8Mx0BvIuzdby6VhVr0YjN46RetxR/FVvcDq9G/R1 Ke9txp8iDA6Y
fcrXnaVJABlwYHJrN7ttgxPphuO85biLnvnB1O0Hk7E7mOgvfzjxxhfuwOsi +PogU8SdeOdT
e1uZDi7dIFCQqWmLwrJHdXaRel+zql2eTSNV8GWXfGmFkIixPrYtr7ro5HVD 8DJCCHYY+FCm
9Oen0aU78S91vDq53b78lJ2D0dX1KPAnunfsBaPLTx5s++iz7wXa5OMw8CYT PUR9+n9+NKPP
vbH/yTtX7aMxfHnn5vJVAJ6XPftI6OZAu78E4KJAWk3agCjIKprOZdcxLoP4 uiGuf4thGSC1
gPP7A1X8DxQQGHIWmFw0FdgZGkBvc2U/tospzVuZCg4r8Hxtk6LNVl31XOMc UnswY3LfCWCG
eyyAkyXb7DmdnsQaSsQN68Tt58Tt/3riqgvCYeKGe4jb/y+I27DZ4f+drfUF PHm2Vs/GigRU
DMvV3V2CsIuaDXLG74n4WMUUAEncS//vgkkHyF8RDXB6szWPSC53x6ahpDKk +rxFvd7uU9/R
P1BLBwho3dZEygcAAB8hAABQSwMEFAAIAAgAQaQ0OQAAAAAAAAAAAAAAADQA AAB0ZXN0LmNv
bmRvYnMubWFwL3NyYy9jb25kbWFwL2ltcGwvQ29udGFpbmVySW1wbC5qYXZh vVVdT9swFH1u
fsWFTTRFNHmnoSti1VSJwUS77RG5zm1rcOzITsoQ4r/PsfPRtEVME/BCsH19 77nnHN+Gx8ce
HENEZfqo2HKVDe0ybK2Lrc+T+LP5hl5K6D1ZIlAp4oSkAUtSPvA885Eqq3cv 3PeHCx7sOc4I
E6iam3dkTYI8Y9wcco40Y1I0p1ItA6ScpRoDTBYBlUkihYsfXzKdvRyKVCoM xhecaD14Jeh6
fmcqv5araLmKnbTa3x/vULr4G9SSr5lYVqjDUoGDfh/muGSin2tU/VhS6Pet GucCioqYoCGt
oAXkArIVQiJj5CBtXuhGmAyj+bCmNgrnwyg0m92gLoAi3kkfpfYzMwkXhnn5 YMDBAkmWK9RA
FDbVMT61N3JurwBEnA2fRpyJ+5YfGn0Lej4tMRu7BBoKlNXConuOQpPEua7M G4VpZbvREk0W
Yio78+VzzijQQktoFQH8k5nuNGzo0gDfCIYnr1Nw3il7poSuMIY14TlWxHbL njaR+7092Lug
cIEKBUXgRs/Apn1Jy86LMhQnI424
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #423003 is a reply to message #423000] |
Sun, 21 September 2008 00:19 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Thanks Tom, I am using the the same labelProvider, and setting the viewer
input with the list containing object instance of both A and B. In your
Example A and B having their own attributes so it is ok. But in my case
since A and B having the superclass attribute "name" If i observe A's Text
it is giving null pointer exception. If i observer B name it is ok because
it will be observer only object instances of B. I guess I must use
ConditionStrategy only. But i am not able to find out the ConditionStrategy
code any where in CVS. Can you provide me some pointer on it.
Regards,
Suresh Subramanian
"Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
news:gb3fuj$vu2$1@build.eclipse.org...
> The ObservableMapLabelProvider is not assigned to a column but to a
> viewer and it won't work for you!
>
> The ConditionStrategy, ... is only something I thought about. We are
> currently looking into this problem area in bug [1] but as stated before
> EMF doesn't has issues with it. It's only the LabelProvider which
> doesn't work.
>
> Please take a look at the attached project and use the LabelProvider
> from there.
>
> Tom
>
> [1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=247997
>
> Suresh Subramanian schrieb:
>> Tom
>>
>> I am not sure how to make this work. Here is my mode Structure
>>
>> Class X {
>> String text;
>> String description
>> }
>>
>> Class A extends X {
>> }
>> Class B extends X {
>> String name;
>> }
>>
>> I am setting the viewer input with a list which contains instance of
>> both A and B.
>>
>> if the list element is instance of A i need to display text in the
>> column 0 and if it is instance of B i need to display Name.
>>
>> I am trying use the ObservableMapLabelProvider but i gives me
>> compilation error
>>
>> *Description Resource Path Location Type
>> The method setLabelProvider(CellLabelProvider) in the type ViewerColumn
>> is not applicable for the arguments
>> (ObservableMapLabelProvider) myPage.java
>> myPlugin/src/myEditorPage.java line 277 Java Problem
>> ***
>> if i want to try the condition approach i don't find ConditionStrategy
>> and Condition. I am still kind of struck. Is there a sample code i can
>> look for.Please let me know
>>
>> Regards,
>> Suresh Subramanian
>>
>>
>> "Tom Schindl" <tom.schindl@bestsolution.at
>> <mailto:tom.schindl@bestsolution.at>> wrote in message
>> news:gat1so$9f8$1@build.eclipse.org...
>>> And the label provider I referenced yesterday also works.
>>>
>>> Tom
>>>
>>> Tom Schindl schrieb:
>>>> Hi,
>>>>
>>>> With standard ObservableMapLabelProvider this already works in
>>>> EMF-Databinding because of the way EMF works :-)
>>>>
>>>> I guess the problem is may LabelProvider then.
>>>>
>>>> Tom
>>>>
>>>> Tom Schindl schrieb:
>>>>> Hi,
>>>>>
>>>>> I know its not there :-) Let me check and see how this could be done.
>>>>>
>>>>> Tom
>>>>>
>>>>> Suresh Subramanian schrieb:
>>>>>> Tom,
>>>>>>
>>>>>> Is it possible for you help me writing
>>>>>> EMFObservables#observeConditionalMap(
>>>>>> new Condition[] {
>>>>>>> new ConditionStrategy(
>>>>>>> MyPack.Literal.CLASS_A,
>>>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>>>> new ConditionStrategy(
>>>>>>> MyPack.Literal.CLASS_B,
>>>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>>> I don't see that in 3.4
>>>>>>
>>>>>> Regards,
>>>>>> Suresh Subramanian
>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at
>> <mailto:tom.schindl@bestsolution.at>> wrote in message
>>>>>> news:gaqikq$a1d$1@build.eclipse.org...
>>>>>>> Could you simple
>>>>>>>
>>>>>>> Base {
>>>>>>> label: String
>>>>>>> }
>>>>>>>
>>>>>>> A extend Base {
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>> B extend Base {
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>> Then observe the base attribute label? If you depend on name and
>>>>>>> text
>>>>>>> somewhere else you could mark them as volatile and transient and
>>>>>>> delegate calls to them to Base#get/setLabel().
>>>>>>>
>>>>>>> I think I can remember having looked at this Observable-Map problem
>>>>>>> already and try to find a solution by make the observing somehow
>>>>>>> conditional.
>>>>>>>
>>>>>>> Something like this:
>>>>>>>
>>>>>>> EMFObservables#observeConditionalMap(
>>>>>>> tableViewerContentProvider.getKnownElements(),
>>>>>>> new Condition[] {
>>>>>>> new ConditionStrategy(
>>>>>>> MyPack.Literal.CLASS_A,
>>>>>>> MyPack.Literal.CLASS_A_ATTR_A),
>>>>>>> new ConditionStrategy(
>>>>>>> MyPack.Literal.CLASS_B,
>>>>>>> MyPack.Literal.CLASS_B_ATTR_B)
>>>>>>> }
>>>>>>> )
>>>>>>>
>>>>>>> But it haven't had time to really think about it, maybe it is
>>>>>>> complete
>>>>>>> nonesense anyways :-)
>>>>>>>
>>>>>>> Tom
>>>>>>>
>>>>>>> Suresh Subramanian schrieb:
>>>>>>>> Tom,
>>>>>>>>
>>>>>>>> Thanks for your input. It is not working if i have 2 unrealted
>>>>>>>> object
>>>>>>>> types.It is only working for one single Type. So i guess it is not
>>>>>>>> possible
>>>>>>>> then.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Suresh Subramanian
>>>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at
>> <mailto:tom.schindl@bestsolution.at>> wrote in message
>>>>>>>> news:gaqdnp$fs9$1@build.eclipse.org...
>>>>>>>>> Suresh Subramanian schrieb:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I am trying to write Table Viewer which shows my model element
>>>>>>>>>> and
>>>>>>>>>> trying
>>>>>>>>>> to use emf databinding for editing the model.
>>>>>>>>>>
>>>>>>>>>> I have 2different types of objects to display. For example
>>>>>>>>>>
>>>>>>>>>> Class A {
>>>>>>>>>> name,
>>>>>>>>>> description
>>>>>>>>>> }
>>>>>>>>>> Class B {
>>>>>>>>>> text,
>>>>>>>>>> description
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> First column should display the name if the object is instance
>> of A and
>>>>>>>>>> text
>>>>>>>>>> if the object is B. In second column i need to
>>>>>>>>>> display a description of the object.
>>>>>>>>> 1. It would help to see the NPE and where it happens, it's
>> possible that
>>>>>>>>> my LabelProvider has a bug.
>>>>>>>>>
>>>>>>>>> 2. I haven't looked at the implementation of
>> EMObservales.observeMap and
>>>>>>>>> if it can deal with 2 completely unrelated object types at
>> least the
>>>>>>>>> Bean implementation can't so if it works is an undocumented
>> feature.
>>>>>>>>>
>>>>>>>>> Tom
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> B e s t S o l u t i o n . at
>>>>>>>>> ------------------------------------------------------------ --------
>>>>>>>>> Tom Schindl
>>>>>>>>> JFace-Committer
>>>>>>>>>
>> ------------------------------------------------------------ --------
>>>>>>> --
>>>>>>> B e s t S o l u t i o n . at
>>>>>>> ------------------------------------------------------------ --------
>>>>>>> Tom Schindl JFace-Committer
>>>>>>> ------------------------------------------------------------ --------
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> B e s t S o l u t i o n . at
>>> ------------------------------------------------------------ --------
>>> Tom Schindl JFace-Committer
>>> ------------------------------------------------------------ --------
>
>
> --
> B e s t S o l u t i o n . at
> ------------------------------------------------------------ --------
> Tom Schindl JFace-Committer
> ------------------------------------------------------------ --------
>
|
|
| | | | |
Re: [Data Binding] Table viewer and EMF Data Binding. [message #423043 is a reply to message #423038] |
Mon, 22 September 2008 05:39 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Tom,
Sorry my orginal zip file didn't have the source code with it. I ran your
latest updated file still i see the error i saw earlier i guess. For your
reference i am attaching the stack trace. I will send the orginal one i send
with the source code in the next mail.
------------------------------------------------------------ ------------------------------------------------------------ --------------------------
Exception in thread "main" java.lang.NullPointerException
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSettingDelegate (BasicEObjectImpl.java:1532)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1027)
at condmap.impl.BaseImpl.eGet(BaseImpl.java:104)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1012)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1004)
at
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:999)
at
org.eclipse.emf.databinding.EObjectObservableMap.doGet(EObje ctObservableMap.java:83)
at
org.eclipse.core.databinding.observable.map.ComputedObservab leMap$1.handleSetChange(ComputedObservableMap.java:53)
at
org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
at
org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
at
org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet.fireSetChange(DecoratingObservableSet.java:59)
at
org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet.handleSetChange(DecoratingObservableSet.java:97)
at
org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet$1.handleSetChange(DecoratingObservableSet.java:71)
at
org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
at
org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
at
org.eclipse.core.databinding.observable.set.ObservableSet.fi reSetChange(ObservableSet.java:67)
at
org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet.access$1(DetailObservableSet.java:1)
at
org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet$1.handleSetChange(DetailObservableSet. java:43)
at
org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
at
org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
at
org.eclipse.core.databinding.observable.set.ObservableSet.fi reSetChange(ObservableSet.java:67)
at
org.eclipse.core.databinding.observable.set.WritableSet.addA ll(WritableSet.java:106)
at
org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet.addAll(DetailObservableSet.java:117)
at
org.eclipse.jface.internal.databinding.viewers.ObservableCol lectionContentProvider.setInput(ObservableCollectionContentP rovider.java:182)
at
org.eclipse.jface.internal.databinding.viewers.ObservableCol lectionContentProvider.inputChanged(ObservableCollectionCont entProvider.java:146)
at
org.eclipse.jface.databinding.viewers.ObservableListContentP rovider.inputChanged(ObservableListContentProvider.java:127)
at org.eclipse.jface.viewers.ContentViewer.setInput(ContentView er.java:247)
at
org.eclipse.jface.viewers.StructuredViewer.setInput(Structur edViewer.java:1603)
at HelloWorld.createUI(HelloWorld.java:87)
at HelloWorld$1.run(HelloWorld.java:38)
at
org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:288)
at HelloWorld.main(HelloWorld.java:34)
------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ --------------------------------
All i did while running your latest code was checked out following plugins
from CVS
org.eclipse.ui;bundle-version="3.5.0",
org.eclipse.core.databinding;bundle-version="1.2.0",
org.eclipse.jface.databinding;bundle-version="1.2.1",
org.eclipse.core.databinding.beans;bundle-version="1.2.0",
Regards,
Suresh Subramanian
"Suresh Subramanian" <sursubra@cisco.com> wrote in message
news:gb6luk$m53$1@build.eclipse.org...
> Thanks Tom for your great help. I will use that, test it and let you know.
>
> Regards,
> Suresh Subramanian
> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
> news:gb6ac8$3tf$1@build.eclipse.org...
>> Hi,
>>
>> I tracked it down by modifying my original sources (your zip didn't has
>> the sources attached!).
>>
>> In fact there are 2 problems:
>> - EObjectObservableMap which is tracked in 248069
>> The fix is so easy that you can until one is available from CVS (a
>> release of it) to copy the EObjectObservableMap and use this one until
>> then
>> - The ObservableColumnLabelProvider it must provide the possibility to
>> switch between different templates like this.
>>
>> -----------8<--------------
>>> List<ObservableColumnLabelProvider.CondiditionalTemplate> templates =
>>> new ArrayList<ObservableColumnLabelProvider.CondiditionalTemplate >();
>>> templates.add(new
>>> ObservableColumnLabelProvider.CondiditionalTemplate("${0}") {
>>>
>>> @Override
>>> public boolean isTemplate(EObject element) {
>>> return !(element instanceof B);
>>> }
>>>
>>> });
>>>
>>> templates.add(new
>>> ObservableColumnLabelProvider.CondiditionalTemplate("${1}") {
>>>
>>> @Override
>>> public boolean isTemplate(EObject element) {
>>> return element instanceof B;
>>> }
>>>
>>> });
>>>
>>> ObservableColumnLabelProvider lp = new
>>> ObservableColumnLabelProvider(maps,templates);
>> -----------8<--------------
>>
>> I've attached a version which provides this and the sample project is
>> used to test.
>>
>> Tom
>>
>>
>> Suresh Subramanian schrieb:
>>> Tom,
>>> Please find the modified project .
>>> Regards
>>> Suresh Subramanian
>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>> news:gb4794$hh2$1@build.eclipse.org...
>>>> Suresh Subramanian schrieb:
>>>>> Thanks Tom, I am using the the same labelProvider, and setting the
>>>>> viewer
>>>>> input with the list containing object instance of both A and B. In
>>>>> your
>>>>> Example A and B having their own attributes so it is ok. But in my
>>>>> case
>>>>> since A and B having the superclass attribute "name" If i observe A's
>>>>> Text
>>>>> it is giving null pointer exception. If i observer B name it is ok
>>>>> because
>>>>> it will be observer only object instances of B. I guess I must use
>>>>> ConditionStrategy only. But i am not able to find out the
>>>>> ConditionStrategy
>>>>> code any where in CVS. Can you provide me some pointer on it.
>>>> *It only exists in my mind.* Still I think this is a LabelProvider
>>>> problem and not one of EMFObservableMap. Can you by chance modify my
>>>> example so that you get the NPE and attach the project to a reply.
>>>>
>>>> Tom
>>>>
>>>> --
>>>> B e s t S o l u t i o n . at
>>>> ------------------------------------------------------------ --------
>>>> Tom Schindl JFace-Committer
>>>> ------------------------------------------------------------ --------
>>>
>>>
>>
>>
>> --
>> B e s t S o l u t i o n . at
>> ------------------------------------------------------------ --------
>> Tom Schindl JFace-Committer
>> ------------------------------------------------------------ --------
>>
>
>
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #423047 is a reply to message #423043] |
Mon, 22 September 2008 08:53 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Tom,
Please find the latest modified code from yours to show my issue in the
attached zip file.
Regards,
Suresh Subramanian
"Suresh Subramanian" <sursubra@cisco.com> wrote in message
news:gb7b1v$pfg$1@build.eclipse.org...
> Tom,
> Sorry my orginal zip file didn't have the source code with it. I ran your
> latest updated file still i see the error i saw earlier i guess. For your
> reference i am attaching the stack trace. I will send the orginal one i
> send
> with the source code in the next mail.
> ------------------------------------------------------------ ------------------------------------------------------------ --------------------------
>
> Exception in thread "main" java.lang.NullPointerException
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSettingDelegate (BasicEObjectImpl.java:1532)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1027)
>
> at condmap.impl.BaseImpl.eGet(BaseImpl.java:104)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1012)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1004)
>
> at
> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:999)
>
> at
> org.eclipse.emf.databinding.EObjectObservableMap.doGet(EObje ctObservableMap.java:83)
>
> at
> org.eclipse.core.databinding.observable.map.ComputedObservab leMap$1.handleSetChange(ComputedObservableMap.java:53)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet.fireSetChange(DecoratingObservableSet.java:59)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet.handleSetChange(DecoratingObservableSet.java:97)
>
> at
> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet$1.handleSetChange(DecoratingObservableSet.java:71)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>
> at
> org.eclipse.core.databinding.observable.set.ObservableSet.fi reSetChange(ObservableSet.java:67)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet.access$1(DetailObservableSet.java:1)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet$1.handleSetChange(DetailObservableSet. java:43)
>
> at
> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>
> at
> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>
> at
> org.eclipse.core.databinding.observable.set.ObservableSet.fi reSetChange(ObservableSet.java:67)
>
> at
> org.eclipse.core.databinding.observable.set.WritableSet.addA ll(WritableSet.java:106)
>
> at
> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet.addAll(DetailObservableSet.java:117)
>
> at
> org.eclipse.jface.internal.databinding.viewers.ObservableCol lectionContentProvider.setInput(ObservableCollectionContentP rovider.java:182)
>
> at
> org.eclipse.jface.internal.databinding.viewers.ObservableCol lectionContentProvider.inputChanged(ObservableCollectionCont entProvider.java:146)
>
> at
> org.eclipse.jface.databinding.viewers.ObservableListContentP rovider.inputChanged(ObservableListContentProvider.java:127)
>
> at
> org.eclipse.jface.viewers.ContentViewer.setInput(ContentView er.java:247)
>
> at
> org.eclipse.jface.viewers.StructuredViewer.setInput(Structur edViewer.java:1603)
>
> at HelloWorld.createUI(HelloWorld.java:87)
>
> at HelloWorld$1.run(HelloWorld.java:38)
>
> at
> org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:288)
>
> at HelloWorld.main(HelloWorld.java:34)
>
> ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ --------------------------------
>
> All i did while running your latest code was checked out following
> plugins
> from CVS
> org.eclipse.ui;bundle-version="3.5.0",
>
> org.eclipse.core.databinding;bundle-version="1.2.0",
>
> org.eclipse.jface.databinding;bundle-version="1.2.1",
>
> org.eclipse.core.databinding.beans;bundle-version="1.2.0",
>
> Regards,
>
> Suresh Subramanian
>
>
> "Suresh Subramanian" <sursubra@cisco.com> wrote in message
> news:gb6luk$m53$1@build.eclipse.org...
>> Thanks Tom for your great help. I will use that, test it and let you
>> know.
>>
>> Regards,
>> Suresh Subramanian
>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>> news:gb6ac8$3tf$1@build.eclipse.org...
>>> Hi,
>>>
>>> I tracked it down by modifying my original sources (your zip didn't has
>>> the sources attached!).
>>>
>>> In fact there are 2 problems:
>>> - EObjectObservableMap which is tracked in 248069
>>> The fix is so easy that you can until one is available from CVS (a
>>> release of it) to copy the EObjectObservableMap and use this one until
>>> then
>>> - The ObservableColumnLabelProvider it must provide the possibility to
>>> switch between different templates like this.
>>>
>>> -----------8<--------------
>>>> List<ObservableColumnLabelProvider.CondiditionalTemplate> templates =
>>>> new ArrayList<ObservableColumnLabelProvider.CondiditionalTemplate >();
>>>> templates.add(new
>>>> ObservableColumnLabelProvider.CondiditionalTemplate("${0}") {
>>>>
>>>> @Override
>>>> public boolean isTemplate(EObject element) {
>>>> return !(element instanceof B);
>>>> }
>>>>
>>>> });
>>>>
>>>> templates.add(new
>>>> ObservableColumnLabelProvider.CondiditionalTemplate("${1}") {
>>>>
>>>> @Override
>>>> public boolean isTemplate(EObject element) {
>>>> return element instanceof B;
>>>> }
>>>>
>>>> });
>>>>
>>>> ObservableColumnLabelProvider lp = new
>>>> ObservableColumnLabelProvider(maps,templates);
>>> -----------8<--------------
>>>
>>> I've attached a version which provides this and the sample project is
>>> used to test.
>>>
>>> Tom
>>>
>>>
>>> Suresh Subramanian schrieb:
>>>> Tom,
>>>> Please find the modified project .
>>>> Regards
>>>> Suresh Subramanian
>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>> news:gb4794$hh2$1@build.eclipse.org...
>>>>> Suresh Subramanian schrieb:
>>>>>> Thanks Tom, I am using the the same labelProvider, and setting the
>>>>>> viewer
>>>>>> input with the list containing object instance of both A and B. In
>>>>>> your
>>>>>> Example A and B having their own attributes so it is ok. But in my
>>>>>> case
>>>>>> since A and B having the superclass attribute "name" If i observe A's
>>>>>> Text
>>>>>> it is giving null pointer exception. If i observer B name it is ok
>>>>>> because
>>>>>> it will be observer only object instances of B. I guess I must use
>>>>>> ConditionStrategy only. But i am not able to find out the
>>>>>> ConditionStrategy
>>>>>> code any where in CVS. Can you provide me some pointer on it.
>>>>> *It only exists in my mind.* Still I think this is a LabelProvider
>>>>> problem and not one of EMFObservableMap. Can you by chance modify my
>>>>> example so that you get the NPE and attach the project to a reply.
>>>>>
>>>>> Tom
>>>>>
>>>>> --
>>>>> B e s t S o l u t i o n . at
>>>>> ------------------------------------------------------------ --------
>>>>> Tom Schindl JFace-Committer
>>>>> ------------------------------------------------------------ --------
>>>>
>>>>
>>>
>>>
>>> --
>>> B e s t S o l u t i o n . at
>>> ------------------------------------------------------------ --------
>>> Tom Schindl JFace-Committer
>>> ------------------------------------------------------------ --------
>>>
>>
>>
>
>
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #423077 is a reply to message #423047] |
Mon, 22 September 2008 16:24 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
Looks like you didn't read my mail completely. Looks like you didn't
applied the patch from the bug [1] i mentionned to the current code
base. It won't work without this fix!
Tom
[1]https://bugs.eclipse.org/bugs/show_bug.cgi?id=248069
Suresh Subramanian schrieb:
> Tom,
>
> Please find the latest modified code from yours to show my issue in the
> attached zip file.
>
> Regards,
> Suresh Subramanian
> "Suresh Subramanian" <sursubra@cisco.com> wrote in message
> news:gb7b1v$pfg$1@build.eclipse.org...
>> Tom,
>> Sorry my orginal zip file didn't have the source code with it. I ran your
>> latest updated file still i see the error i saw earlier i guess. For your
>> reference i am attaching the stack trace. I will send the orginal one i
>> send
>> with the source code in the next mail.
>> ------------------------------------------------------------ ------------------------------------------------------------ --------------------------
>>
>> Exception in thread "main" java.lang.NullPointerException
>>
>> at
>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSettingDelegate (BasicEObjectImpl.java:1532)
>>
>> at
>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1027)
>>
>> at condmap.impl.BaseImpl.eGet(BaseImpl.java:104)
>>
>> at
>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1012)
>>
>> at
>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1004)
>>
>> at
>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:999)
>>
>> at
>> org.eclipse.emf.databinding.EObjectObservableMap.doGet(EObje ctObservableMap.java:83)
>>
>> at
>> org.eclipse.core.databinding.observable.map.ComputedObservab leMap$1.handleSetChange(ComputedObservableMap.java:53)
>>
>> at
>> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>>
>> at
>> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>>
>> at
>> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet.fireSetChange(DecoratingObservableSet.java:59)
>>
>> at
>> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet.handleSetChange(DecoratingObservableSet.java:97)
>>
>> at
>> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet$1.handleSetChange(DecoratingObservableSet.java:71)
>>
>> at
>> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>>
>> at
>> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>>
>> at
>> org.eclipse.core.databinding.observable.set.ObservableSet.fi reSetChange(ObservableSet.java:67)
>>
>> at
>> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet.access$1(DetailObservableSet.java:1)
>>
>> at
>> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet$1.handleSetChange(DetailObservableSet. java:43)
>>
>> at
>> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>>
>> at
>> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>>
>> at
>> org.eclipse.core.databinding.observable.set.ObservableSet.fi reSetChange(ObservableSet.java:67)
>>
>> at
>> org.eclipse.core.databinding.observable.set.WritableSet.addA ll(WritableSet.java:106)
>>
>> at
>> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet.addAll(DetailObservableSet.java:117)
>>
>> at
>> org.eclipse.jface.internal.databinding.viewers.ObservableCol lectionContentProvider.setInput(ObservableCollectionContentP rovider.java:182)
>>
>> at
>> org.eclipse.jface.internal.databinding.viewers.ObservableCol lectionContentProvider.inputChanged(ObservableCollectionCont entProvider.java:146)
>>
>> at
>> org.eclipse.jface.databinding.viewers.ObservableListContentP rovider.inputChanged(ObservableListContentProvider.java:127)
>>
>> at
>> org.eclipse.jface.viewers.ContentViewer.setInput(ContentView er.java:247)
>>
>> at
>> org.eclipse.jface.viewers.StructuredViewer.setInput(Structur edViewer.java:1603)
>>
>> at HelloWorld.createUI(HelloWorld.java:87)
>>
>> at HelloWorld$1.run(HelloWorld.java:38)
>>
>> at
>> org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:288)
>>
>> at HelloWorld.main(HelloWorld.java:34)
>>
>> ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ --------------------------------
>>
>> All i did while running your latest code was checked out following
>> plugins
>> from CVS
>> org.eclipse.ui;bundle-version="3.5.0",
>>
>> org.eclipse.core.databinding;bundle-version="1.2.0",
>>
>> org.eclipse.jface.databinding;bundle-version="1.2.1",
>>
>> org.eclipse.core.databinding.beans;bundle-version="1.2.0",
>>
>> Regards,
>>
>> Suresh Subramanian
>>
>>
>> "Suresh Subramanian" <sursubra@cisco.com> wrote in message
>> news:gb6luk$m53$1@build.eclipse.org...
>>> Thanks Tom for your great help. I will use that, test it and let you
>>> know.
>>>
>>> Regards,
>>> Suresh Subramanian
>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>> news:gb6ac8$3tf$1@build.eclipse.org...
>>>> Hi,
>>>>
>>>> I tracked it down by modifying my original sources (your zip didn't has
>>>> the sources attached!).
>>>>
>>>> In fact there are 2 problems:
>>>> - EObjectObservableMap which is tracked in 248069
>>>> The fix is so easy that you can until one is available from CVS (a
>>>> release of it) to copy the EObjectObservableMap and use this one until
>>>> then
>>>> - The ObservableColumnLabelProvider it must provide the possibility to
>>>> switch between different templates like this.
>>>>
>>>> -----------8<--------------
>>>>> List<ObservableColumnLabelProvider.CondiditionalTemplate> templates =
>>>>> new ArrayList<ObservableColumnLabelProvider.CondiditionalTemplate >();
>>>>> templates.add(new
>>>>> ObservableColumnLabelProvider.CondiditionalTemplate("${0}") {
>>>>>
>>>>> @Override
>>>>> public boolean isTemplate(EObject element) {
>>>>> return !(element instanceof B);
>>>>> }
>>>>>
>>>>> });
>>>>>
>>>>> templates.add(new
>>>>> ObservableColumnLabelProvider.CondiditionalTemplate("${1}") {
>>>>>
>>>>> @Override
>>>>> public boolean isTemplate(EObject element) {
>>>>> return element instanceof B;
>>>>> }
>>>>>
>>>>> });
>>>>>
>>>>> ObservableColumnLabelProvider lp = new
>>>>> ObservableColumnLabelProvider(maps,templates);
>>>> -----------8<--------------
>>>>
>>>> I've attached a version which provides this and the sample project is
>>>> used to test.
>>>>
>>>> Tom
>>>>
>>>>
>>>> Suresh Subramanian schrieb:
>>>>> Tom,
>>>>> Please find the modified project .
>>>>> Regards
>>>>> Suresh Subramanian
>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>> news:gb4794$hh2$1@build.eclipse.org...
>>>>>> Suresh Subramanian schrieb:
>>>>>>> Thanks Tom, I am using the the same labelProvider, and setting the
>>>>>>> viewer
>>>>>>> input with the list containing object instance of both A and B. In
>>>>>>> your
>>>>>>> Example A and B having their own attributes so it is ok. But in my
>>>>>>> case
>>>>>>> since A and B having the superclass attribute "name" If i observe A's
>>>>>>> Text
>>>>>>> it is giving null pointer exception. If i observer B name it is ok
>>>>>>> because
>>>>>>> it will be observer only object instances of B. I guess I must use
>>>>>>> ConditionStrategy only. But i am not able to find out the
>>>>>>> ConditionStrategy
>>>>>>> code any where in CVS. Can you provide me some pointer on it.
>>>>>> *It only exists in my mind.* Still I think this is a LabelProvider
>>>>>> problem and not one of EMFObservableMap. Can you by chance modify my
>>>>>> example so that you get the NPE and attach the project to a reply.
>>>>>>
>>>>>> Tom
>>>>>>
>>>>>> --
>>>>>> B e s t S o l u t i o n . at
>>>>>> ------------------------------------------------------------ --------
>>>>>> Tom Schindl JFace-Committer
>>>>>> ------------------------------------------------------------ --------
>>>>>
>>>>
>>>> --
>>>> B e s t S o l u t i o n . at
>>>> ------------------------------------------------------------ --------
>>>> Tom Schindl JFace-Committer
>>>> ------------------------------------------------------------ --------
>>>>
>>>
>>
>
>
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
|
|
|
Re: [Data Binding] Table viewer and EMF Data Binding. [message #423082 is a reply to message #423077] |
Mon, 22 September 2008 17:28 |
Suresh Subramanian Messages: 61 Registered: July 2009 |
Member |
|
|
Thanks Tom. I didn't read your mail properly. After applying the patch it
works fine. Thanks for your extenden help on this.
Regards,
Suresh Subramanian
"Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
news:gb8gsb$mpj$1@build.eclipse.org...
> Looks like you didn't read my mail completely. Looks like you didn't
> applied the patch from the bug [1] i mentionned to the current code
> base. It won't work without this fix!
>
> Tom
>
> [1]https://bugs.eclipse.org/bugs/show_bug.cgi?id=248069
>
> Suresh Subramanian schrieb:
>> Tom,
>>
>> Please find the latest modified code from yours to show my issue in the
>> attached zip file.
>>
>> Regards,
>> Suresh Subramanian
>> "Suresh Subramanian" <sursubra@cisco.com> wrote in message
>> news:gb7b1v$pfg$1@build.eclipse.org...
>>> Tom,
>>> Sorry my orginal zip file didn't have the source code with it. I ran
>>> your
>>> latest updated file still i see the error i saw earlier i guess. For
>>> your
>>> reference i am attaching the stack trace. I will send the orginal one i
>>> send
>>> with the source code in the next mail.
>>> ------------------------------------------------------------ ------------------------------------------------------------ --------------------------
>>>
>>> Exception in thread "main" java.lang.NullPointerException
>>>
>>> at
>>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSettingDelegate (BasicEObjectImpl.java:1532)
>>>
>>> at
>>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1027)
>>>
>>> at condmap.impl.BaseImpl.eGet(BaseImpl.java:104)
>>>
>>> at
>>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1012)
>>>
>>> at
>>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:1004)
>>>
>>> at
>>> org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjec tImpl.java:999)
>>>
>>> at
>>> org.eclipse.emf.databinding.EObjectObservableMap.doGet(EObje ctObservableMap.java:83)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.map.ComputedObservab leMap$1.handleSetChange(ComputedObservableMap.java:53)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet.fireSetChange(DecoratingObservableSet.java:59)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet.handleSetChange(DecoratingObservableSet.java:97)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.DecoratingObserv ableSet$1.handleSetChange(DecoratingObservableSet.java:71)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.ObservableSet.fi reSetChange(ObservableSet.java:67)
>>>
>>> at
>>> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet.access$1(DetailObservableSet.java:1)
>>>
>>> at
>>> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet$1.handleSetChange(DetailObservableSet. java:43)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.SetChangeEvent.d ispatch(SetChangeEvent.java:61)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.ChangeManager.fireEv ent(ChangeManager.java:129)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.ObservableSet.fi reSetChange(ObservableSet.java:67)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.set.WritableSet.addA ll(WritableSet.java:106)
>>>
>>> at
>>> org.eclipse.core.internal.databinding.observable.masterdetai l.DetailObservableSet.addAll(DetailObservableSet.java:117)
>>>
>>> at
>>> org.eclipse.jface.internal.databinding.viewers.ObservableCol lectionContentProvider.setInput(ObservableCollectionContentP rovider.java:182)
>>>
>>> at
>>> org.eclipse.jface.internal.databinding.viewers.ObservableCol lectionContentProvider.inputChanged(ObservableCollectionCont entProvider.java:146)
>>>
>>> at
>>> org.eclipse.jface.databinding.viewers.ObservableListContentP rovider.inputChanged(ObservableListContentProvider.java:127)
>>>
>>> at
>>> org.eclipse.jface.viewers.ContentViewer.setInput(ContentView er.java:247)
>>>
>>> at
>>> org.eclipse.jface.viewers.StructuredViewer.setInput(Structur edViewer.java:1603)
>>>
>>> at HelloWorld.createUI(HelloWorld.java:87)
>>>
>>> at HelloWorld$1.run(HelloWorld.java:38)
>>>
>>> at
>>> org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:288)
>>>
>>> at HelloWorld.main(HelloWorld.java:34)
>>>
>>> ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ --------------------------------
>>>
>>> All i did while running your latest code was checked out following
>>> plugins
>>> from CVS
>>> org.eclipse.ui;bundle-version="3.5.0",
>>>
>>> org.eclipse.core.databinding;bundle-version="1.2.0",
>>>
>>> org.eclipse.jface.databinding;bundle-version="1.2.1",
>>>
>>> org.eclipse.core.databinding.beans;bundle-version="1.2.0",
>>>
>>> Regards,
>>>
>>> Suresh Subramanian
>>>
>>>
>>> "Suresh Subramanian" <sursubra@cisco.com> wrote in message
>>> news:gb6luk$m53$1@build.eclipse.org...
>>>> Thanks Tom for your great help. I will use that, test it and let you
>>>> know.
>>>>
>>>> Regards,
>>>> Suresh Subramanian
>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>> news:gb6ac8$3tf$1@build.eclipse.org...
>>>>> Hi,
>>>>>
>>>>> I tracked it down by modifying my original sources (your zip didn't
>>>>> has
>>>>> the sources attached!).
>>>>>
>>>>> In fact there are 2 problems:
>>>>> - EObjectObservableMap which is tracked in 248069
>>>>> The fix is so easy that you can until one is available from CVS (a
>>>>> release of it) to copy the EObjectObservableMap and use this one
>>>>> until
>>>>> then
>>>>> - The ObservableColumnLabelProvider it must provide the possibility to
>>>>> switch between different templates like this.
>>>>>
>>>>> -----------8<--------------
>>>>>> List<ObservableColumnLabelProvider.CondiditionalTemplate> templates =
>>>>>> new ArrayList<ObservableColumnLabelProvider.CondiditionalTemplate >();
>>>>>> templates.add(new
>>>>>> ObservableColumnLabelProvider.CondiditionalTemplate("${0}") {
>>>>>>
>>>>>> @Override
>>>>>> public boolean isTemplate(EObject element) {
>>>>>> return !(element instanceof B);
>>>>>> }
>>>>>>
>>>>>> });
>>>>>>
>>>>>> templates.add(new
>>>>>> ObservableColumnLabelProvider.CondiditionalTemplate("${1}") {
>>>>>>
>>>>>> @Override
>>>>>> public boolean isTemplate(EObject element) {
>>>>>> return element instanceof B;
>>>>>> }
>>>>>>
>>>>>> });
>>>>>>
>>>>>> ObservableColumnLabelProvider lp = new
>>>>>> ObservableColumnLabelProvider(maps,templates);
>>>>> -----------8<--------------
>>>>>
>>>>> I've attached a version which provides this and the sample project is
>>>>> used to test.
>>>>>
>>>>> Tom
>>>>>
>>>>>
>>>>> Suresh Subramanian schrieb:
>>>>>> Tom,
>>>>>> Please find the modified project .
>>>>>> Regards
>>>>>> Suresh Subramanian
>>>>>> "Tom Schindl" <tom.schindl@bestsolution.at> wrote in message
>>>>>> news:gb4794$hh2$1@build.eclipse.org...
>>>>>>> Suresh Subramanian schrieb:
>>>>>>>> Thanks Tom, I am using the the same labelProvider, and setting the
>>>>>>>> viewer
>>>>>>>> input with the list containing object instance of both A and B. In
>>>>>>>> your
>>>>>>>> Example A and B having their own attributes so it is ok. But in my
>>>>>>>> case
>>>>>>>> since A and B having the superclass attribute "name" If i observe
>>>>>>>> A's
>>>>>>>> Text
>>>>>>>> it is giving null pointer exception. If i observer B name it is ok
>>>>>>>> because
>>>>>>>> it will be observer only object instances of B. I guess I must use
>>>>>>>> ConditionStrategy only. But i am not able to find out the
>>>>>>>> ConditionStrategy
>>>>>>>> code any where in CVS. Can you provide me some pointer on it.
>>>>>>> *It only exists in my mind.* Still I think this is a LabelProvider
>>>>>>> problem and not one of EMFObservableMap. Can you by chance modify my
>>>>>>> example so that you get the NPE and attach the project to a reply.
>>>>>>>
>>>>>>> Tom
>>>>>>>
>>>>>>> --
>>>>>>> B e s t S o l u t i o n . at
>>>>>>> ------------------------------------------------------------ --------
>>>>>>> Tom Schindl JFace-Committer
>>>>>>> ------------------------------------------------------------ --------
>>>>>>
>>>>>
>>>>> --
>>>>> B e s t S o l u t i o n . at
>>>>> ------------------------------------------------------------ --------
>>>>> Tom Schindl JFace-Committer
>>>>> ------------------------------------------------------------ --------
>>>>>
>>>>
>>>
>>
>>
>
>
> --
> B e s t S o l u t i o n . at
> ------------------------------------------------------------ --------
> Tom Schindl JFace-Committer
> ------------------------------------------------------------ --------
|
|
| |
Goto Forum:
Current Time: Thu Apr 25 12:12:26 GMT 2024
Powered by FUDForum. Page generated in 0.06436 seconds
|