EObject beany = 
fbeanPart.getEObject();
  EClass meta = 
beany.eClass();
  EStructuralFeature sf = 
meta.getEStructuralFeature("name");
  IJavaInstance toSet = 
BeanUtilities.createJavaObject("java.lang.String", 
fOwner.getCompositionModel().getModelResourceSet(), "\"" + 
fbeanPart.getSimpleName() + "\"" );
  beany.eSet( sf , toSet  
);
 
 
However, my question is now:
 
What, if any, are the correct hooks in the override 
mechanism for running extra code such as this that directly manipulates 
the EMF model to add extra stuff when dropping a new 
component?
 
 
Darren Hurt
 -----Original Message-----
From: 
ve-dev-bounces@xxxxxxxxxxx [mailto:ve-dev-bounces@xxxxxxxxxxx]On Behalf Of 
Darren Hurt
Sent: 18 May 2006 16:57
To: 'Discussions 
people developing code for the Visual Editor project'
Subject: RE: 
[ve-dev] Extra line when generating code for a new component 
etc.
 
  I 
  have put a breakpoint in the class you suggested, and looked at the override 
  file.
  Following this through, the only method worth putting a breakpoint in 
  is the getText(Object)
  method.
  I 
  did this, and it gets called firstly after dropping the bean when the dialog 
  opens, and again 
  later after pressing OK in order to set the text in a tree 
  item.
  I 
  don't actually see how the value is being set into the 
  model.
  Neither do I see how using the labelProvider override gives me the 
  opportunity do do what I want 
  in 
  my example, or how it could be the right place to hang such 
  code.
   
  Are 
  you saying that I need to do something like :
   
  EObject ref = (EObject) element;
EClass meta = 
  ref.eClass();
EStructuralFeature sf = 
  meta.getEStructuralFeature("name");
  IJavaInstance toSet = BeanUtilities.createJavaObject("java.lang.String", 
  JavaEditDomainHelper.getResourceSet(fEditDomain), "\"" + 
  nameOfWidget + "\"" 
  );
ref.eSet( sf , 
  toSet  );
   
  In order to set the value in the EMF 
  model?
   
  If so, are there any generic hooks 
  in the override mechanism (the label provider doesn't seem like the right 
  place) to run code such as this in order to manipulate the EMF model 
  
  so that you can generate extra code when 
  dropping a new bean?
   
  Perhaps I am misunderstanding what you 
  are saying completely, I don't know.
  Any further help in understanding this 
  would be greatly appreciated.
   
   
   
   
  
    
>In the generated code for the method getMyComponent(), I 
    want to add an extra line 
.. 
    
>myComponent.setName("myComponent"); 
    <-- Extra line that 
    sets the name of the component to be the name of the field. 
    
More precisely, what you want to do is 
    to set another property, the "name" property to myComponent.  There is 
    a difference here, because the extra line really reflects another bean 
    setting.  This setting must be reflected in the EMF model. 
     Setting the "name" propery in the model will drive it to the UI, PS, 
    TargetVM, and will generate the line of code for ya. 
The question is then, how do you set the name 
    property on the drop, authmatically. 
VE is already doing similar things like this: 
        When you drop a widget 
    for example, it may (depending on your perf.) open a dialog and ask you for 
    the name to give the bean. 
  
          If you drop a Label, it will automatically set the 
    "text" property (generating the setText() line). 
Check out the 
    org.eclipse.ve.swt\overrides\org\eclipse\swt\widgets\Label.override, and 
    take a breakpoint in org.eclipse.ve.internal.java.core.DefaultLabelProviderWithNameAndAttribute 
    
------------
Dr. 
    Gili Mendel
IBM
Software Development
RTP Raleigh, NC
(919)543 
    6408, tie: 441 6408
    
      
      
        Darren Hurt 
          <darren.hurt@xxxxxxxxxx>  Sent by: ve-dev-bounces@xxxxxxxxxxx 
          05/17/2006 01:33 PM 
           
            
            
              | 
                 Please respond 
                to Discussions people developing code for the Visual Editor 
                project 
          <ve-dev@xxxxxxxxxxx>  |    
         | 
          
            
            
              | 
                 To 
               | "'Discussions people developing 
                code for the Visual Editor project'" 
                <ve-dev@xxxxxxxxxxx> 
             |  
              | 
                 cc 
               | 
             |  
              | 
                 Subject 
               | [ve-dev] Extra line when 
                generating code for a new component 
          etc. |    
          
  | 
Hi there. 
I have a 
    couple more questions regarding extension of the visual editor. 
    
  
I want to add a 
    new line every time I add a component in the Visual Editor. 
  
Basically, suppose I add a 
    new component called myComponent. 
  
    
In the generated code for the method 
    getMyComponent(), I want to add an extra line 
as follows: 
  
private MyComponent getMyComponent() 
    
{ 
    if(myComponent == null) 
    { 
        myComponent = new 
    MyComponent(); 
    
        myComponent.setName("myComponent"); <-- Extra line that sets the name of the 
    component to be the name of the field. 
        } 
    return myComponent; 
    } 
  
    
  
After reading the 
    tutorial and poking around, I tried to use 
    the override mechanism, and have managed to add my own ComponentDecoder and 
    ConstructorDecoderHelper and 
set up the 
    override XMI file correctly. 
I have made 
    the generate method of the helper append the extra line. 
  
Unfortunately, when code 
    is generated, although my override is definitely picked up (I have logging 
    in there that confirms that my decoder 
is invoked and the correct string returned), the resulting generated 
    code does not contain my extra line! 
  
    
Do you have any idea why this is 
    happening? 
  
(I verify that I have a constructor in my component 
    decoder by the line 
fFeatureMapper.getFeature(null).equals(getAllocationFeature((IJavaObjectInstance) 
    fbeanPart.getEObject()))) 
  
  
  
Is there any other way of achieving what I want, via the override 
    mechanism or whatever? 
  
Additionally, I would like to change the code generation 
    so that actual components are constructed in the variable 
    declarations. 
That is, instead of having 
    
  
    
    private MyComponent myComponent = 
    null; 
  
  
      I would like to have: 
  
    private 
    MyComponent myComponent = new MyComponent(); 
  
    and if possible to replace the lazy initialization in the getMethod 
    with a simple getter, although this last point isn't crucial. 
    
  
Is there any way 
    of doing this? 
It looks like another case 
    of using more or less the same override mechanism, but I'm not sure. 
    
  
The reason is 
    that some of the code I generate for my beans refers to other beans. If the 
    methods aren't called in the correct order 
 then it is possible that the bean being referred to will not 
    have been created. 
  
For example, suppose that MyComponent has a property 
    myProperty whose type is another component, and that you enter the 
    
name of the component in a 
    customizer/property editor. Suppose this results in generated code 
    
  
MyComponent 
    comp = new MyComponent(); 
comp.setMyProperty(anotherComponent); 
  
If anotherComponent has not 
    yet been created, then this generated code will just set the value to be 
    null. 
I have tried making the generated 
    code 
  
comp.setMyProperty(getAnotherComponent()); 
  
instead, but the 
    parser seems unable to deal with this. 
  
  
    Darren Hurt 
  
  
  
  
  
  
  
  
  
  
 _______________________________________________
ve-dev mailing 
    list
ve-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ve-dev