Basically you need a permanent storage that you manage on your own (not
provided by the API) to maintain the context data for each blip.  That's
what I meant by your own datastore to keep track of the blip ids and
associated data.  Take a look at the sample robot Stocky which has a
persistence layer to remember blips data with JDO on AppeEngine -

http://google-wave-resources.googlecode.com/svn/trunk/samples/extensions/robots/java/stocky/src/robot/

<http://google-wave-resources.googlecode.com/svn/trunk/samples/extensions/robots/java/stocky/src/robot/>
Austin

On Fri, Oct 23, 2009 at 6:22 PM, Smola <callmesm...@gmail.com> wrote:

>
> Keeping track of the IDs for "lookup?"  I have been searching for a
> method in the API which takes a blip ID as an argument and returns the
> blip matching that ID but have been unable to find one.  Am I missing
> something?  Please tell me how this can be done if possible because my
> development has been stalled as a result.
>
>
> Smola
>
>
> On Oct 23, 2:55 am, "Austin Chau (Google employee)"
> <api.aus...@google.com> wrote:
> > So yes, when a blip is out of context you would have no way to retrieve
> its
> > document content from the event callback alone.  What can you do now is
> > maintain the context on your own with a datastore backend.  Essentially
> > keeping track of all wavelet and blip ids for lookup.
> > We know that this is not ideal and we are working on this as speak to
> remove
> > the limited context on callback.  Stay tuned for updates.
> > Austin
> >
> > 2009/10/22 Bálint Kriván <bal...@google.com>
> >
> >
> >
> > > Oh I see...So robot doesn't get the whole wavelet with all of the
> blips,
> > > but the blip of the related event and it's parent.
> > > Ok, but if I would like to access to the rootblip, and I get its id
> with
> > > wavelet.getRootBlipId(), how can I request its content
> > > (getDoucment().getText())?
> (wavelet.getRootBlip().getDocument().getText()
> > > also throws null exception in these cases, so I don't have any idea how
> to
> > > achieve this)
> >
> > > Thanks for your guidance!
> >
> > > On Fri, Oct 23, 2009 at 2:56 AM, Austin Chau (Google employee) <
> > > api.aus...@google.com> wrote:
> >
> > >> Hi,
> > >> To get the root blip id in your scenario -
> >
> > >> wave.appendBlip().getDocument().append(wavelet.getRootBlipId());
> >
> > >> This would work because it does not require "context" of a grandparent
> > >> blip.  The reason that you are getting exception is because the
> context
> > >> associated with an event callback only goes back its immediate parent.
>  So
> > >> in your case if the triggering event is resulted from a grandchild
> blip away
> > >> from root, it will no longer has context to recreate the root blip
> when you
> > >> invoked wavelet.getRootBlip() - thus you will get a null reference.
> >
> > >> Hope it helps,
> > >> Austin
> >
> > >> 2009/10/22 Bálint Kriván <bal...@google.com>
> >
> > >> Reply to myself and others: I think this is related to
> > >>>http://code.google.com/p/google-wave-resources/issues/detail?id=200.
> >
> > >>> 2009/10/22 Bálint Kriván <bal...@krivan.info>
> >
> > >>> Hi!
> > >>>> I have this little chunk of code:
> >
> > >>>>  public void debug(RobotMessageBundle bundle, String msg)
> >
> > >>>>  {
> >
> > >>>>  List<String> list = new ArrayList();
> >
> > >>>>  list.add("<myaddress in google wave>");
> >
> > >>>>  Wavelet wave = bundle.createWavelet(list);
> >
> > >>>>   wave.appendBlip().getDocument().append(msg);
> >
> > >>>>  }
> >
> > >>>>   @Override
> >
> > >>>>  public void processEvents(RobotMessageBundle robotMessageBundle) {
> >
> > >>>>  Wavelet wavelet = robotMessageBundle.getWavelet();
> >
> > >>>>  for (Event event : robotMessageBundle.getEvents()) {
> >
> > >>>>  Blip currentBlip = event.getBlip();
> >
> > >>>>  switch (event.getType()) {
> >
> > >>>>  case BLIP_SUBMITTED:
> >
> > >>>>  debug(robotMessageBundle,
> > >>>>> String.valueOf(wavelet.getRootBlip().getBlipId())); // line 46!
> >
> > >>>>  }
> >
> > >>>>  }
> >
> > >>>>  }
> >
> > >>>> So when I add a blip to the wavelet where the robot is, it should
> open a
> > >>>> new wave with me and send the id of the root blip (The top blip in
> the
> > >>>> wavelet).
> > >>>> But if this blip isn't right after the root blip (so the very first
> > >>>> Reply button) then I've got a NullPointerException:
> >
> > >>>> java.lang.NullPointerException
> >
> > >>>>   at com.google.wave.api.impl.BlipImpl.getBlipId(BlipImpl.java:56)
> >
> > >>>>   at robot.MainServlet.processEvents(MainServlet.java:46)
> >
> > >>>>   at
> > >>>>>
> com.google.wave.api.AbstractRobotServlet.doPost(AbstractRobotServlet.java:8
> 9)
> >
> > >>>>   [...]
> >
> > >>>> What is the recommended way to access the very first blip (which is
> I
> > >>>> guess the RootBlip)?
> >
> > >>>> Thanks for your help!
> >
> > >>>> --
> > >>>> Üdv,
> > >>>> Kriván Bálint
> >
> > >>> --
> > >>> Üdv,
> > >>> Kriván Bálint
> >
> > > --
> > > Üdv,
> > > Kriván Bálint
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Wave API" group.
To post to this group, send email to google-wave-api@googlegroups.com
To unsubscribe from this group, send email to 
google-wave-api+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-wave-api?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to