right now i only have a property change listener do something when  
otrunk step is added.

                 Object newStep = evt.getNewValue();
                
                if (newStep instanceof OTrunkStep) {
                         
((OTrunkStep)newStep).setControllerService(controllerService);
                        OTObject otStep = 
controllerService.getOTObject(newStep);
                        otActivity.getStepList().add(otStep);
                }

rereading the email, i am a little confused, does this need to happen  
for all step adds? all activity adds?

similarly  do we need to do this when an activity or step is removed?


-Tony



On Mar 20, 2008, at 12:39 PM, Aaron Unger wrote:

> It should probably go inside registerRealObject() and it should do  
> something like:
>
> PasStep newStep = ... get the new step...
> newStep.setControllerService(controllerService);
> OTObject otStep = controllerService.getOTObject(newStep);
> otPasActivity.getStepList().add(otStep);
>
> A similar thing should happen in PasProjectController as well:
>
> PasActivity newActivity = ... get the new activity...
> OTObject otActivity = controllerService.getOTObject(newActivity);
> otPasProject.getActivityList().add(otActivity);
>
> Ideally in each controller, you'd also set up listeners that (be  
> careful of endless update loops):
> 1) listen to the OTObject for changes and update the real object  
> appropriately
> 2) listen to the real object for changes and update the OTObject  
> appropriately
>
> That way the OTrunk world and the Real Object world stay in sync in  
> real-time, and theoretically negate needed to sync objects in  
> saveRealObject().
>
> For an example, check out:
> https://svn.concord.org/svn/projects/trunk/common/java/simulations/biologica/src/org/concord/biologica/state/OTOrganismController.java
>
> -- Aaron
>
> Anthony Perritano wrote:
>>
>> ok. i added property change listeners on the PasProject and  
>> PasActivity in their respect controllers. it listens for an add.  
>> what i am not clear on is:
>>
>>>>>> And when it gets that event it can "save" the new step, by  
>>>>>> calling
>>>>>> getOTObject with the new step.
>>
>> heres what i have in the loadReadObject method of the  
>> OTPasActvitiyCOntroller
>>
>>  activity.addPropertyChangeListener(PasActivity.STEPS, new  
>> PropertyChangeListener() {
>>
>>  public void propertyChange(PropertyChangeEvent evt) {
>>  System.out.println("Step added calling from  
>> OTPasActivityCOntroller");
>>
>>  }
>>  });
>>
>> -Tony
>>
>>
>>
>> On Mar 20, 2008, at 10:46 AM, Aaron Unger wrote:
>>> No, I think you can leave all of the PAS stuff the way it is. All  
>>> you'll need to do is add the listeners to the PasProjectController  
>>> and PasActivityController to handle creating/adding the otrunk  
>>> objects for a new PasActivity and PasStep.
>>>
>>> I made changes to the OTrunkStep so that calling setType() will  
>>> just store the Class and mark that it needs to be set up, and then  
>>> when getComponent() is called it will then do all of its creation  
>>> work.
>>>
>>> -- Aaron
>>>
>>> Anthony Perritano wrote:
>>>>
>>>> Aaron thats correct. the steps get added to the activity before  
>>>> getComponent is called. getComponent is called only when a user  
>>>> clicks on a bean in the tree. the authoring tool just gets what  
>>>> ever getComponent gives and dumps it in the right pane.
>>>>
>>>> so do i need to do a call to getComponent after i create the  
>>>> newInstance to fire things up?
>>>> -Tony
>>>>
>>>>
>>>>
>>>> On Mar 20, 2008, at 6:14 AM, Aaron Unger wrote:
>>>>> Scott, you were spot-on with the context, and you brought up a  
>>>>> angle of it I hadn't thought about. I think what you described  
>>>>> will work. Tony can correct me, but it looks to me like the  
>>>>> steps are being added to the activity prior to getComponent  
>>>>> being called. Then it's just a matter of making sure some sort  
>>>>> of event gets passed on which the controller can catch.
>>>>>
>>>>> Thanks!
>>>>> -- Aaron
>>>>>
>>>>> Scott Cytacki wrote:
>>>>>>
>>>>>> I might have the context wrong, but I think I know what the  
>>>>>> problem is.
>>>>>>
>>>>>> At runtime if the OTrunkStep is running inside of OTrunkCurnit  
>>>>>> the
>>>>>> OTrunkStep gets its controllerService set by
>>>>>> its own controller OTGenericOTrunkStepController.
>>>>>>
>>>>>> At author time I'd guess you are creating the OTrunkStep instance
>>>>>> directly.  Which means the code in OTGenericOTrunkStepController
>>>>>> will not get run.
>>>>>>
>>>>>> One way to work around that is to make sure to add the  
>>>>>> OTrunkStep to its
>>>>>> PasActivity before calling getComponent.
>>>>>> Then the OTPasActivityController can be listening to an add  
>>>>>> event on
>>>>>> PasActivity (you might need to add that event).
>>>>>> And when it gets that event it can "save" the new step, by  
>>>>>> calling
>>>>>> getOTObject with the new step.
>>>>>>
>>>>>> This approach has a few benefits:
>>>>>> - it should fix the problem above
>>>>>> - it brings the controllers more inline with our existing  
>>>>>> controllers
>>>>>> which save their OTObjects using events from the real objects.
>>>>>>
>>>>>> ---- futurist thinking ----
>>>>>>
>>>>>> Using events to update the OTObjects is good because it means the
>>>>>> OTObjects are updated in realtime instead of at the end.  Most  
>>>>>> of the
>>>>>> benifits from this are still vaporware but hopefully they will
>>>>>> materialize some day soon:
>>>>>> - the OTrunk logging system can give a log of when an author  
>>>>>> things not
>>>>>> just at end when they saved.
>>>>>> - if we get a better representation of the tree of OTObjects,  
>>>>>> that can
>>>>>> be a used as an alternative way of visualizing the project.
>>>>>> - if we have searching system then an author can do fulltext  
>>>>>> searching.
>>>>>> - if we integrate Jackrabbit as an OTDatabase, then the  
>>>>>> jackrabbit data
>>>>>> for the activity would be updated immediately.  Which would  
>>>>>> make it
>>>>>> possible for collaborative editing like subethaedit
>>>>>> - if we integrate an "edit system" like emf has, then we can  
>>>>>> add an real
>>>>>> "history" and "undo" functionality, which can go backward and  
>>>>>> forward
>>>>>> multiple steps.
>>>>>>
>>>>>> Many of the things above are not that hard to implement.  The  
>>>>>> one that
>>>>>> is probably the most difficult is the "edit system", because it  
>>>>>> will
>>>>>> probably require changes to much of the current controllers and  
>>>>>> views.
>>>>>>
>>>>>> ------------------
>>>>>>
>>>>>> Scott
>>>>>>
>>>>>> Aaron Unger wrote:
>>>>>>
>>>>>>> Hmm, right. I was afraid the controllerService wouldn't get
>>>>>>> initialized. I'll see what I can do to change/work around that.
>>>>>>>
>>>>>>> -- Aaron
>>>>>>>
>>>>>>> Anthony Perritano wrote:
>>>>>>>
>>>>>>>> The new supportTypes is great, i load it into a quick and dirty
>>>>>>>> dialog. However, when i try to instantiate a step i get the  
>>>>>>>> following:
>>>>>>>>
>>>>>>>> java.lang.NullPointerException
>>>>>>>> at  
>>>>>>>> org.telscenter.pas.otrunk.OTrunkStep.setType(OTrunkStep.java: 
>>>>>>>> 335)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .telscenter 
>>>>>>>> .pas 
>>>>>>>> .authortool 
>>>>>>>> .cards 
>>>>>>>> .customizer.pas.AddStepAction.addEmptyStep(AddStepAction.java: 
>>>>>>>> 238)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .telscenter 
>>>>>>>> .pas 
>>>>>>>> .authortool 
>>>>>>>> .cards 
>>>>>>>> .customizer 
>>>>>>>> .pas.AddStepAction.createNewStep(AddStepAction.java:190)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .telscenter.pas.authortool.cards.customizer.pas.AddStepAction 
>>>>>>>> $2.finish(AddStepAction.java:133)
>>>>>>>> at org.netbeans.spi.wizard.WizardPage 
>>>>>>>> $CWPP.finish(WizardPage.java:996)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .netbeans 
>>>>>>>> .spi.wizard.SimpleWizardInfo.finish(SimpleWizardInfo.java:145)
>>>>>>>> at  
>>>>>>>> org.netbeans.spi.wizard.SimpleWizard.finish(SimpleWizard.java: 
>>>>>>>> 177)
>>>>>>>> at org.netbeans.spi.wizard.Wizard.finish(Wizard.java:222)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .netbeans 
>>>>>>>> .api 
>>>>>>>> .wizard 
>>>>>>>> .displayer 
>>>>>>>> .NavButtonManager.processFinishProceed(NavButtonManager.java: 
>>>>>>>> 453)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .netbeans 
>>>>>>>> .api 
>>>>>>>> .wizard 
>>>>>>>> .displayer 
>>>>>>>> .NavButtonManager.processFinish(NavButtonManager.java:437)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .netbeans 
>>>>>>>> .api 
>>>>>>>> .wizard 
>>>>>>>> .displayer 
>>>>>>>> .NavButtonManager.actionPerformed(NavButtonManager.java:258)
>>>>>>>> at
>>>>>>>> javax 
>>>>>>>> .swing.AbstractButton.fireActionPerformed(AbstractButton.java: 
>>>>>>>> 1882)
>>>>>>>> at
>>>>>>>> javax.swing.AbstractButton 
>>>>>>>> $Handler.actionPerformed(AbstractButton.java:2202)
>>>>>>>> at
>>>>>>>> javax 
>>>>>>>> .swing 
>>>>>>>> .DefaultButtonModel 
>>>>>>>> .fireActionPerformed(DefaultButtonModel.java:420)
>>>>>>>> at  
>>>>>>>> javax 
>>>>>>>> .swing.DefaultButtonModel.setPressed(DefaultButtonModel.java: 
>>>>>>>> 258)
>>>>>>>> at
>>>>>>>> javax 
>>>>>>>> .swing 
>>>>>>>> .plaf 
>>>>>>>> .basic 
>>>>>>>> .BasicButtonListener.mouseReleased(BasicButtonListener.java: 
>>>>>>>> 236)
>>>>>>>> at java.awt.Component.processMouseEvent(Component.java:5602)
>>>>>>>> at javax.swing.JComponent.processMouseEvent(JComponent.java: 
>>>>>>>> 3135)
>>>>>>>> at java.awt.Component.processEvent(Component.java:5367)
>>>>>>>> at java.awt.Container.processEvent(Container.java:2010)
>>>>>>>> at java.awt.Component.dispatchEventImpl(Component.java:4068)
>>>>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2068)
>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:3903)
>>>>>>>> at  
>>>>>>>> java 
>>>>>>>> .awt.LightweightDispatcher.retargetMouseEvent(Container.java: 
>>>>>>>> 4256)
>>>>>>>> at  
>>>>>>>> java 
>>>>>>>> .awt.LightweightDispatcher.processMouseEvent(Container.java: 
>>>>>>>> 3936)
>>>>>>>> at  
>>>>>>>> java.awt.LightweightDispatcher.dispatchEvent(Container.java: 
>>>>>>>> 3866)
>>>>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2054)
>>>>>>>> at java.awt.Window.dispatchEventImpl(Window.java:1791)
>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:3903)
>>>>>>>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
>>>>>>>> at
>>>>>>>> java 
>>>>>>>> .awt 
>>>>>>>> .EventDispatchThread 
>>>>>>>> .pumpOneEventForHierarchy(EventDispatchThread.java:269)
>>>>>>>> at
>>>>>>>> java 
>>>>>>>> .awt 
>>>>>>>> .EventDispatchThread 
>>>>>>>> .pumpEventsForHierarchy(EventDispatchThread.java:190)
>>>>>>>> at
>>>>>>>> java 
>>>>>>>> .awt 
>>>>>>>> .EventDispatchThread 
>>>>>>>> .pumpEventsForHierarchy(EventDispatchThread.java:180)
>>>>>>>> at java.awt.Dialog$1.run(Dialog.java:535)
>>>>>>>> at java.awt.Dialog$2.run(Dialog.java:563)
>>>>>>>> at java.security.AccessController.doPrivileged(Native Method)
>>>>>>>> at java.awt.Dialog.show(Dialog.java:561)
>>>>>>>> at java.awt.Component.show(Component.java:1302)
>>>>>>>> at java.awt.Component.setVisible(Component.java:1255)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .netbeans 
>>>>>>>> .api 
>>>>>>>> .wizard 
>>>>>>>> .displayer 
>>>>>>>> .WizardDisplayerImpl.showInDialog(WizardDisplayerImpl.java:334)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .netbeans 
>>>>>>>> .api 
>>>>>>>> .wizard 
>>>>>>>> .displayer.WizardDisplayerImpl.show(WizardDisplayerImpl.java: 
>>>>>>>> 250)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .netbeans 
>>>>>>>> .api.wizard.WizardDisplayer.showWizard(WizardDisplayer.java: 
>>>>>>>> 107)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .netbeans 
>>>>>>>> .api.wizard.WizardDisplayer.showWizard(WizardDisplayer.java: 
>>>>>>>> 135)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .telscenter 
>>>>>>>> .pas 
>>>>>>>> .authortool 
>>>>>>>> .cards 
>>>>>>>> .customizer 
>>>>>>>> .pas.AddStepAction.actionPerformed(AddStepAction.java:152)
>>>>>>>> at
>>>>>>>> javax 
>>>>>>>> .swing.AbstractButton.fireActionPerformed(AbstractButton.java: 
>>>>>>>> 1882)
>>>>>>>> at
>>>>>>>> javax.swing.AbstractButton 
>>>>>>>> $Handler.actionPerformed(AbstractButton.java:2202)
>>>>>>>> at
>>>>>>>> javax 
>>>>>>>> .swing 
>>>>>>>> .DefaultButtonModel 
>>>>>>>> .fireActionPerformed(DefaultButtonModel.java:420)
>>>>>>>> at  
>>>>>>>> javax 
>>>>>>>> .swing.DefaultButtonModel.setPressed(DefaultButtonModel.java: 
>>>>>>>> 258)
>>>>>>>> at javax.swing.AbstractButton.doClick(AbstractButton.java:334)
>>>>>>>> at
>>>>>>>> javax 
>>>>>>>> .swing 
>>>>>>>> .plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1051)
>>>>>>>> at
>>>>>>>> javax.swing.plaf.basic.BasicMenuItemUI 
>>>>>>>> $Handler.mouseReleased(BasicMenuItemUI.java:1092)
>>>>>>>> at
>>>>>>>> java 
>>>>>>>> .awt 
>>>>>>>> .AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java: 
>>>>>>>> 231)
>>>>>>>> at java.awt.Component.processMouseEvent(Component.java:5602)
>>>>>>>> at javax.swing.JComponent.processMouseEvent(JComponent.java: 
>>>>>>>> 3135)
>>>>>>>> at java.awt.Component.processEvent(Component.java:5367)
>>>>>>>> at java.awt.Container.processEvent(Container.java:2010)
>>>>>>>> at java.awt.Component.dispatchEventImpl(Component.java:4068)
>>>>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2068)
>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:3903)
>>>>>>>> at  
>>>>>>>> java 
>>>>>>>> .awt.LightweightDispatcher.retargetMouseEvent(Container.java: 
>>>>>>>> 4256)
>>>>>>>> at  
>>>>>>>> java 
>>>>>>>> .awt.LightweightDispatcher.processMouseEvent(Container.java: 
>>>>>>>> 3936)
>>>>>>>> at  
>>>>>>>> java.awt.LightweightDispatcher.dispatchEvent(Container.java: 
>>>>>>>> 3866)
>>>>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2054)
>>>>>>>> at java.awt.Window.dispatchEventImpl(Window.java:1791)
>>>>>>>> at java.awt.Component.dispatchEvent(Component.java:3903)
>>>>>>>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
>>>>>>>> at
>>>>>>>> java 
>>>>>>>> .awt 
>>>>>>>> .EventDispatchThread 
>>>>>>>> .pumpOneEventForHierarchy(EventDispatchThread.java:269)
>>>>>>>> at
>>>>>>>> java 
>>>>>>>> .awt 
>>>>>>>> .EventDispatchThread 
>>>>>>>> .pumpEventsForHierarchy(EventDispatchThread.java:190)
>>>>>>>> at  
>>>>>>>> java 
>>>>>>>> .awt.EventDispatchThread.pumpEvents(EventDispatchThread.java: 
>>>>>>>> 184)
>>>>>>>> at  
>>>>>>>> java 
>>>>>>>> .awt.EventDispatchThread.pumpEvents(EventDispatchThread.java: 
>>>>>>>> 176)
>>>>>>>> at java.awt.EventDispatchThread.run(EventDispatchThread.java: 
>>>>>>>> 110)
>>>>>>>> java.lang.NullPointerException
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .concord 
>>>>>>>> .otrunk 
>>>>>>>> .view.OTViewerHelper.loadOTDatabase(OTViewerHelper.java:294)
>>>>>>>> at  
>>>>>>>> org 
>>>>>>>> .telscenter 
>>>>>>>> .pas.otrunk.OTrunkStep.getComponent(OTrunkStep.java:149)
>>>>>>>> at
>>>>>>>> org.telscenter.pas.otrunk.OTrunkStepBeanInfo 
>>>>>>>> $ 
>>>>>>>> OTrunkStepQuickEditorFactory 
>>>>>>>> .getQuickEditor(OTrunkStepBeanInfo.java:56)
>>>>>>>> at
>>>>>>>> org 
>>>>>>>> .telscenter 
>>>>>>>> .pas 
>>>>>>>> .authortool 
>>>>>>>> .cards 
>>>>>>>> .customizer 
>>>>>>>> .pas 
>>>>>>>> .PasCustomizerCardX.findQuickEditor(PasCustomizerCardX.java: 
>>>>>>>> 671)
>>>>>>>>
>>>>>>>> its coming from:
>>>>>>>>
>>>>>>>> public void setType(Class type) throws Exception {
>>>>>>>> // set the current step type
>>>>>>>> // get the OTObject which corresponds to this step
>>>>>>>> // set its target to a new object of the type specified
>>>>>>>> HERE -> OTGenericOTrunkStep otStep = (OTGenericOTrunkStep)
>>>>>>>> controllerService.getOTObject(this);
>>>>>>>> OTObject obj = otStep.getOTObjectService().createObject(type);
>>>>>>>> otStep.setTarget(obj);
>>>>>>>> this.setTarget(obj);
>>>>>>>> }
>>>>>>>>
>>>>>>>> i have verified that setType is being called before  
>>>>>>>> getComponent:
>>>>>>>>
>>>>>>>>  public static class OTrunkStepQuickEditorFactory extends
>>>>>>>>                             AbstractQuickEditorFactory {
>>>>>>>>         public JPanel getQuickEditor(Object bean) {
>>>>>>>>
>>>>>>>>             final OTrunkStep otrunkBean = (OTrunkStep) bean;
>>>>>>>>             JPanel p = (JPanel) otrunkBean.getComponent(true);
>>>>>>>>
>>>>>>>>             return p;
>>>>>>>>         }
>>>>>>>>     }
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> -Tony
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mar 17, 2008, at 1:19 PM, Sam Fentress wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>> [EMAIL PROTECTED]
>>>>>>>>> <mailto:[EMAIL PROTECTED]> writes:*
>>>>>>>>> At the same time, we could achieve an "open ended" step  
>>>>>>>>> easily by
>>>>>>>>> embedding an OTCompoundDoc into the step instead of one of  
>>>>>>>>> the other
>>>>>>>>> explicit OTObjects. The OTCompoundDoc would then have all of  
>>>>>>>>> the UDL
>>>>>>>>> style WYSIWYG authoring, unlimited object insertion, etc.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On that note, I've added an example ot otrunk-examples which  
>>>>>>>>> is a
>>>>>>>>> blank WYSIWYG editing page, with affordances to add almost  
>>>>>>>>> any type
>>>>>>>>> of object that we currently support (with a few excceptions  
>>>>>>>>> for the
>>>>>>>>> moment, such as question objects which I need to take out of  
>>>>>>>>> the UDL
>>>>>>>>> project). You can find the document-edit example at the  
>>>>>>>>> bottom of
>>>>>>>>> page in
>>>>>>>>> BasicExamples:http://continuum.concord.org/otrunk/examples/BasicExamples/ot-index.html
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I left out the ability to switch back-and-forth between  
>>>>>>>>> author and
>>>>>>>>> student views here so as not to confuse an already-long otml  
>>>>>>>>> file.
>>>>>>>>> This could easily be added, however.
>>>>>>>>>
>>>>>>>>> Sam
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"SAIL-Dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/SAIL-Dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to