Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [e4-dev] Improved handling of ID's - Suggestion for discussion

Hi Tom,

the option to create a Java class with static identifier sounds like a create idea. This way the model would be the leading place to maintain the ID's and still the usage of ID in the coding would be relatively safe. 

Best regards, Lars

2012/2/3 Tom Schindl <tom.schindl@xxxxxxxxxxxxxxx>
Looks like you've read my mind - this was my next question.

I think the other way round is easier to manage. Make the model editor
generate a Java-Class with static fields because what I still like is to
let me inject ModelElements by their ID using

-----------8<-----------
@Inject
@ElementId(ModelIds.MY_PART)
private MPart part;
-----------8<-----------

or a more generic annotation which accepts an XPath would look like this

-----------8<-----------
@Inject
@ElementPath("//id("+ModelIds.MY_PART+")")
private MPart part;
-----------8<-----------

I think I'll add a custom annotation to my tools.services package for
the it and as a first step add a command to the editor to generate a
Java-Class with the IDs.

Tom

Am 03.02.12 11:09, schrieb Sebastian Zarnekow:
> Hi,
>
> does that mean that we have to load the class eagerly thus lazy bundle
> initialization is no longer possible? Or would you compile the xmi by
> inlining the identifier when the bundles are packaged?
>
> Sorry if I'm missing the point here.
>
> Cheers,
> Sebastian
>
>
> On 03.02.2012, at 10:33, Lars Vogel <lars.vogel@xxxxxxxxxxxxxx
> <mailto:lars.vogel@xxxxxxxxxxxxxx>> wrote:
>
>> Hello Brian & Tom,
>>
>> thanks for the clarification, that is exactly my suggestion. Managing
>> ID's twice is one of the major pain points in Eclipse development and
>> it would be great if we allow such an approach.
>>
>> I will open a bug report for this feature, as this would be additional
>> as you described I don't think its critical but it might be something
>> to look at for Eclpise 4.3.
>>
>> Thanks for the feedback, Lars
>>
>> 2012/1/31 Brian de Alwis <briandealwis@xxxxxxxxx
>> <mailto:briandealwis@xxxxxxxxx>>
>>
>>     I think an example of what Lars is talking about is to allow
>>     referencing an identifier from within a .e4xmi file that is
>>     actually defined in source code.  This would allow single-sourcing
>>     of an identifier.
>>
>>     For example, say we have a command defined for
>>     org.eclipse.ui.exit, and some code that wants to programmatically
>>     execute this command.  Currently we'd define the command in an
>>     e4xmi file:
>>
>>            <commands elementId="org.eclipse.ui.exit" />
>>
>>     And then also reference the command identifier from a source file:
>>
>>            public class MyPart {
>>                    public static final String EXIT_ID =
>>     "org.eclipse.ui.exit";
>>
>>                    // does this work?
>>                    @Inject @Named(EXIT_ID) MCommand exitCommand;
>>                    @Inject EHandlerService hs;
>>
>>                    public void executeExit() {
>>                            hs.executeHandler(new
>>     ParameterizedCommand(exitCommand, null));
>>                    }
>>            }
>>
>>     Currently, org.eclipse.ui.exit has to be used both in the .e4xmi
>>     file defining the command, and in the code.
>>
>>     Lars' suggestion would change the e4xmi to something like:
>>
>>            <commands elementId="model://bundle/MyPart/EXIT_ID" />
>>
>>     That would cause the command's elementId to be looked up (and
>>     validated!) at runtime; mismatches could be reported.  (I guess
>>     either ApplicationElementImpl#[gs]etElementId() would need to hook
>>     in some resolver.)
>>
>>     But I see one possible problem: what should happen if the bundle
>>     is unloaded or replaced — and the identifier is now different?  I
>>     suppose since almost all objects now use references, it may only
>>     be an issue with fragment's imports.
>>
>>     [Incidentally, why is it that the e4xmi elements are plural?
>>     <commands/>, <handlers/>, <bindings/>, <addons/>…]
>>
>>     Brian.
>>
>>     On 31-Jan-2012, at 3:22 PM, Tom Schindl wrote:
>>
>>     > Hi Lars,
>>     >
>>     > I'm not 100% I really understand what you are suggesting here?
>>     Is that
>>     > the tooling generates constants in an extra class?
>>     >
>>     > I'm also not sure what the URL modelid:// is good for? Did you
>>     e.g. know
>>     > that you can simply use XPath on EMF-Models (we don't ship the
>>     bundle
>>     > but it's part of the e4-git-repo).
>>     >
>>     > I think you need to elaborate a bit more, so that I can
>>     understand what
>>     > you propose and how it could be implemented.
>>     >
>>     > Tom
>>     >
>>     > Am 30.01.12 23:12, schrieb Lars Vogel:
>>     >> Hi,
>>     >>
>>     >> one thing I like about Android programming, is that you can
>>     refer to
>>     >> static strings for ID's in a XML file (layout file) as well as
>>     in Java
>>     >> code. In the layout file you use @id/button1to point to a ID
>>     defined in
>>     >> a file.
>>     >>
>>     >> In your Android coding you could reference the ID via a static
>>     string.
>>     >> This removes the issue that you may have typos either in your
>>     coding or
>>     >> in your layout and allows consistent refactoring of ID's.
>>     >>
>>     >> One of the issues I believe still exists in todays Eclipse 4
>>     plug-in
>>     >> development, is that you have to define a ID twice, once in your
>>     >> application model and at least once in your coding.
>>     >>
>>     >> I really liked the change to bundleclass:// in M5.
>>     >>
>>     >> Perhaps we could introduce another URI for ID which could be
>>     referred to
>>     >> an ID defined in a file, e.g.
>>     >>
>>     >> modelid://Bundle-SymbolicName/path/filename.extension/id
>>     >>
>>     >> And add another annotation, like @ID, which allows to annotate
>>     static
>>     >> strings and to mark them a ID's which could be used in the
>>     model as well
>>     >> in the coding.
>>     >>
>>     >> @ID
>>     >> public static final String part1 = "com.example.test.part1".
>>     >>
>>     >> Would that be helpful? Is it worth to open a enhancement
>>     request for this?
>>     >>
>>     >> Best regards, Lars
>>     >> --
>>     >> Lars
>>     >> http://www.vogella.de - Eclipse, Android and Java Tutorials
>>     >> http://www.twitter.com/vogella - Lars on Twitter
>>     >>
>>     >>
>>     >> _______________________________________________
>>     >> e4-dev mailing list
>>     >> e4-dev@xxxxxxxxxxx <mailto:e4-dev@xxxxxxxxxxx>
>>     >> https://dev.eclipse.org/mailman/listinfo/e4-dev
>>     >
>>     >
>>     > --
>>     > B e s t S o l u t i o n . a t                        EDV
>>     Systemhaus GmbH
>>     >
>>     ------------------------------------------------------------------------
>>     > tom schindl                 geschäftsführer/CEO
>>     >
>>     ------------------------------------------------------------------------
>>     > eduard-bodem-gasse 5-7/1   A-6020 innsbruck     fax      ++43
>>     512 935833 <tel:%2B%2B43%20512%20935833>
>>     > http://www.BestSolution.at                      phone    ++43
>>     512 935834 <tel:%2B%2B43%20512%20935834>
>>     > _______________________________________________
>>     > e4-dev mailing list
>>     > e4-dev@xxxxxxxxxxx <mailto:e4-dev@xxxxxxxxxxx>
>>     > https://dev.eclipse.org/mailman/listinfo/e4-dev
>>
>>     _______________________________________________
>>     e4-dev mailing list
>>     e4-dev@xxxxxxxxxxx <mailto:e4-dev@xxxxxxxxxxx>
>>     https://dev.eclipse.org/mailman/listinfo/e4-dev
>>
>>
>>
>>
>> --
>> Lars
>> http://www.vogella.de - Eclipse, Android and Java Tutorials
>> http://www.twitter.com/vogella - Lars on Twitter
>> _______________________________________________
>> e4-dev mailing list
>> e4-dev@xxxxxxxxxxx <mailto:e4-dev@xxxxxxxxxxx>
>> https://dev.eclipse.org/mailman/listinfo/e4-dev
>
>
> _______________________________________________
> e4-dev mailing list
> e4-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/e4-dev


--
B e s t S o l u t i o n . a t                        EDV Systemhaus GmbH
------------------------------------------------------------------------
tom schindl                 geschäftsführer/CEO
------------------------------------------------------------------------
eduard-bodem-gasse 5-7/1   A-6020 innsbruck     fax      ++43 512 935833
http://www.BestSolution.at                      phone    ++43 512 935834
_______________________________________________
e4-dev mailing list
e4-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/e4-dev



--
Lars
http://www.vogella.de - Eclipse, Android and Java Tutorials
http://www.twitter.com/vogella - Lars on Twitter

Back to the top