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
-~----------~----~----~----~------~----~------~--~---