I checked in some changes to deal with the DataGraph exception. It
should now work.
I also checked in changes to pas-test.otml. You should now be able to
author open-ended otrunk steps. Your options will be somewhat limited
right now, but more things (like netlogo models and molecular workbench
models) can be added in easily once the jars are included in the
authoring tool runtime environment.
Check 'em out and let me know if it's not working for you.
-- Aaron
Anthony Perritano wrote:
I was able to figure this problem out. i did not need to
do createObject. from there i was able to get Drawing Step created
new!! it shows very fine in the editor.
however when i create a data graph then click on it to load it
shows a box where the graph should be with nothing except "....."
at
org.concord.datagraph.state.DataGraphManager.initialize(DataGraphManager.java:553)
at
org.concord.datagraph.state.DataGraphManager.<init>(DataGraphManager.java:152)
at
org.concord.datagraph.state.DataCollectorView.getDataGraph(DataCollectorView.java:96)
at
org.concord.datagraph.state.DataCollectorView.getComponent(DataCollectorView.java:82)
at
org.concord.datagraph.state.OTDataCollectorView.getComponent(OTDataCollectorView.java:70)
at
org.concord.otrunk.view.OTJComponentServiceImpl.getComponent(OTJComponentServiceImpl.java:57)
at
org.concord.otrunk.view.OTViewContainerPanel.createJComponent(OTViewContainerPanel.java:351)
at
org.concord.otrunk.view.OTViewContainerPanel$CreateComponentTask.run(OTViewContainerPanel.java:451)
at
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at
java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
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)
that line in DataGraphManager:
xOTAxis.addOTChangeListener(this);
and OpenEnded step says its
missing its a view for OTFolderObject.
the message "No
sock in OTrunkStep - cannot save data"
continiously is written to the console
thx
On Mar 25, 2008, at 2:56 PM, Anthony Perritano wrote:
thanks aaron.
i have implemented the remove part now i am reworking the add
part.
does getOTObject(newStep) create a new object if not one exist?
OTObject otStep = controllerService.getOTObject(oldStep);
otStep keeps coming back null, is this because i need to do:
OTPasStep
otStep = (OTPasStep) objService.createObject(OTPasStep.class);
this
step could be any step evidence,etc....
then
add it like:
otActivity.getStepList().add(otStep);
but
the new step we are adding will always be a genric pasStep and not the
specific one that we want to add?
On Mar 25, 2008, at 11:53 AM, Aaron Unger wrote:
Yes, it should ideally do
it for all step adds as well as deletions. Then you only need to have
the
((OTrunkStep)newStep).setControllerService( controllerService);
inside of the if (newStep instanceof OTrunkStep) block.
so:
Object newStep = evt.getNewValue();
if (newStep instanceof OTrunkStep) {
((OTrunkStep)newStep).setControllerService(controllerService);
}
OTObject otStep = controllerService.getOTObject(newStep);
otActivity.getStepList().add(otStep);
and for deletions:
Object oldStep = evt.getOldValue();
OTObject otStep = controllerService.getOTObject(oldStep);
otActivity.getStepList().remove(otStep);
-- Aaron
Anthony Perritano wrote:
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?
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");
}
});
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?
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 -~----------~----~----~----~------~----~------~--~---
|